http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java index 47db825..3c9a614 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/LoggerLogic.java @@ -80,9 +80,9 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> { private List<LoggerTO> list(final LoggerType type) { List<LoggerTO> result = new ArrayList<>(); - for (Logger syncopeLogger : loggerDAO.findAll(type)) { + for (Logger logger : loggerDAO.findAll(type)) { LoggerTO loggerTO = new LoggerTO(); - BeanUtils.copyProperties(syncopeLogger, loggerTO); + BeanUtils.copyProperties(logger, loggerTO); result.add(loggerTO); } @@ -102,9 +102,9 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> { for (LoggerTO logger : list(LoggerType.AUDIT)) { try { - result.add(AuditLoggerName.fromLoggerName(logger.getName())); + result.add(AuditLoggerName.fromLoggerName(logger.getKey())); } catch (Exception e) { - LOG.warn("Unexpected audit logger name: {}", logger.getName(), e); + LOG.warn("Unexpected audit logger name: {}", logger.getKey(), e); } }
http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java index bb369ab..e8502ec 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/ReportLogic.java @@ -55,7 +55,7 @@ import org.apache.syncope.server.persistence.api.entity.ReportExec; import org.apache.syncope.server.provisioning.api.data.ReportDataBinder; import org.apache.syncope.server.provisioning.api.job.JobNamer; import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader; -import org.apache.syncope.server.logic.init.JobInstanceLoader; +import org.apache.syncope.server.provisioning.api.job.JobInstanceLoader; import org.apache.syncope.server.logic.report.Reportlet; import org.apache.syncope.server.logic.report.ReportletConfClass; import org.apache.syncope.server.logic.report.TextSerializer; @@ -206,20 +206,20 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } @PreAuthorize("hasRole('REPORT_READ')") - public ReportTO read(final Long reportId) { - Report report = reportDAO.find(reportId); + public ReportTO read(final Long reportKey) { + Report report = reportDAO.find(reportKey); if (report == null) { - throw new NotFoundException("Report " + reportId); + throw new NotFoundException("Report " + reportKey); } return binder.getReportTO(report); } @PreAuthorize("hasRole('REPORT_READ')") @Transactional(readOnly = true) - public ReportExecTO readExecution(final Long executionId) { - ReportExec reportExec = reportExecDAO.find(executionId); + public ReportExecTO readExecution(final Long executionKey) { + ReportExec reportExec = reportExecDAO.find(executionKey); if (reportExec == null) { - throw new NotFoundException("Report execution " + executionId); + throw new NotFoundException("Report execution " + executionKey); } return binder.getReportExecTO(reportExec); } @@ -291,10 +291,10 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } @PreAuthorize("hasRole('REPORT_READ')") - public ReportExec getAndCheckReportExec(final Long executionId) { - ReportExec reportExec = reportExecDAO.find(executionId); + public ReportExec getAndCheckReportExec(final Long executionKey) { + ReportExec reportExec = reportExecDAO.find(executionKey); if (reportExec == null) { - throw new NotFoundException("Report execution " + executionId); + throw new NotFoundException("Report execution " + executionKey); } if (!ReportExecStatus.SUCCESS.name().equals(reportExec.getStatus()) || reportExec.getExecResult() == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidReportExec); @@ -307,10 +307,10 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } @PreAuthorize("hasRole('REPORT_EXECUTE')") - public ReportExecTO execute(final Long reportId) { - Report report = reportDAO.find(reportId); + public ReportExecTO execute(final Long reportKey) { + Report report = reportDAO.find(reportKey); if (report == null) { - throw new NotFoundException("Report " + reportId); + throw new NotFoundException("Report " + reportKey); } try { @@ -327,7 +327,7 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } ReportExecTO result = new ReportExecTO(); - result.setReport(reportId); + result.setReport(reportKey); result.setStartDate(new Date()); result.setStatus(ReportExecStatus.STARTED.name()); result.setMessage("Job fired; waiting for results..."); @@ -336,10 +336,10 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } @PreAuthorize("hasRole('REPORT_DELETE')") - public ReportTO delete(final Long reportId) { - Report report = reportDAO.find(reportId); + public ReportTO delete(final Long reportKey) { + Report report = reportDAO.find(reportKey); if (report == null) { - throw new NotFoundException("Report " + reportId); + throw new NotFoundException("Report " + reportKey); } ReportTO deletedReport = binder.getReportTO(report); @@ -349,10 +349,10 @@ public class ReportLogic extends AbstractTransactionalLogic<ReportTO> { } @PreAuthorize("hasRole('REPORT_DELETE')") - public ReportExecTO deleteExecution(final Long executionId) { - ReportExec reportExec = reportExecDAO.find(executionId); + public ReportExecTO deleteExecution(final Long executionKey) { + ReportExec reportExec = reportExecDAO.find(executionKey); if (reportExec == null) { - throw new NotFoundException("Report execution " + executionId); + throw new NotFoundException("Report execution " + executionKey); } ReportExecTO reportExecToDelete = binder.getReportExecTO(reportExec); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java deleted file mode 100644 index 9eccaea..0000000 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/SpringBeanJobFactory.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.server.logic; - -import org.apache.syncope.server.provisioning.api.job.JobNamer; -import org.apache.syncope.server.logic.init.JobInstanceLoader; -import org.quartz.SchedulerContext; -import org.quartz.spi.TriggerFiredBundle; -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.MutablePropertyValues; -import org.springframework.beans.PropertyAccessorFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; - -public class SpringBeanJobFactory extends org.springframework.scheduling.quartz.SpringBeanJobFactory { - - private String[] ignoredUnknownProperties; - - private SchedulerContext schedulerContext; - - @Override - public void setIgnoredUnknownProperties(final String[] ignoredUnknownProperties) { - String[] defensiveCopy = ignoredUnknownProperties.clone(); - super.setIgnoredUnknownProperties(defensiveCopy); - this.ignoredUnknownProperties = defensiveCopy; - } - - @Override - public void setSchedulerContext(final SchedulerContext schedulerContext) { - super.setSchedulerContext(schedulerContext); - this.schedulerContext = schedulerContext; - } - - /** - * An implementation of SpringBeanJobFactory that retrieves the bean from the Spring context so that autowiring and - * transactions work. - * - * {@inheritDoc} - */ - @Override - protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { - final ApplicationContext ctx = ((ConfigurableApplicationContext) schedulerContext.get("applicationContext")); - - // Try to re-create job bean from underlying task (useful for managing failover scenarios) - if (!ctx.containsBean(bundle.getJobDetail().getKey().getName())) { - Long taskId = JobNamer.getTaskIdFromJobName(bundle.getJobDetail().getKey().getName()); - if (taskId != null) { - JobInstanceLoader jobInstanceLoader = ctx.getBean(JobInstanceLoader.class); - jobInstanceLoader.registerTaskJob(taskId); - } - - Long reportId = JobNamer.getReportIdFromJobName(bundle.getJobDetail().getKey().getName()); - if (reportId != null) { - JobInstanceLoader jobInstanceLoader = ctx.getBean(JobInstanceLoader.class); - jobInstanceLoader.registerReportJob(reportId); - } - } - - final Object job = ctx.getBean(bundle.getJobDetail().getKey().getName()); - final BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(job); - if (isEligibleForPropertyPopulation(wrapper.getWrappedInstance())) { - final MutablePropertyValues pvs = new MutablePropertyValues(); - if (this.schedulerContext != null) { - pvs.addPropertyValues(this.schedulerContext); - } - pvs.addPropertyValues(bundle.getJobDetail().getJobDataMap()); - pvs.addPropertyValues(bundle.getTrigger().getJobDataMap()); - if (this.ignoredUnknownProperties == null) { - wrapper.setPropertyValues(pvs, true); - } else { - for (String propName : this.ignoredUnknownProperties) { - if (pvs.contains(propName) && !wrapper.isWritableProperty(propName)) { - pvs.removePropertyValue(propName); - } - } - wrapper.setPropertyValues(pvs); - } - } - return job; - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java index 683cda6..f97bc83 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/TaskLogic.java @@ -51,7 +51,7 @@ import org.apache.syncope.server.provisioning.api.job.JobNamer; import org.apache.syncope.server.provisioning.api.job.TaskJob; import org.apache.syncope.server.provisioning.api.propagation.PropagationTaskExecutor; import org.apache.syncope.server.logic.init.ImplementationClassNamesLoader; -import org.apache.syncope.server.logic.init.JobInstanceLoader; +import org.apache.syncope.server.provisioning.api.job.JobInstanceLoader; import org.apache.syncope.server.logic.notification.NotificationJob; import org.quartz.JobDataMap; import org.quartz.JobKey; @@ -305,6 +305,7 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> { if (TaskType.SCHEDULED == taskUtil.getType() || TaskType.SYNCHRONIZATION == taskUtil.getType() || TaskType.PUSH == taskUtil.getType()) { + jobInstanceLoader.unregisterJob(task); } @@ -373,9 +374,6 @@ public class TaskLogic extends AbstractTransactionalLogic<AbstractTaskTO> { return res; } - /** - * {@inheritDoc} - */ @Override protected AbstractTaskTO resolveReference(final Method method, final Object... args) throws UnresolvedReferenceException { http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java index c3b01f6..3e0de7e 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/UserLogic.java @@ -339,7 +339,7 @@ public class UserLogic extends AbstractSubjectLogic<UserTO, UserMod> { public UserTO delete(final Long key) { List<Role> ownedRoles = roleDAO.findOwnedByUser(key); if (!ownedRoles.isEmpty()) { - List<String> owned = new ArrayList<String>(ownedRoles.size()); + List<String> owned = new ArrayList<>(ownedRoles.size()); for (Role role : ownedRoles) { owned.add(role.getKey() + " " + role.getName()); } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoader.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoader.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoader.java deleted file mode 100644 index 3f6f753..0000000 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoader.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.server.logic.init; - -import java.text.ParseException; -import org.apache.syncope.server.persistence.api.entity.Report; -import org.apache.syncope.server.persistence.api.entity.task.Task; -import org.quartz.SchedulerException; - -public interface JobInstanceLoader { - - void registerJob(Task task, String jobClassName, String cronExpression) - throws ClassNotFoundException, SchedulerException, ParseException; - - void registerJob(Report report) throws SchedulerException, ParseException; - - void registerReportJob(Long reportKey) throws SchedulerException, ParseException; - - void registerTaskJob(Long taskKey) throws ClassNotFoundException, SchedulerException, ParseException; - - void unregisterJob(Task task); - - void unregisterJob(Report report); - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoaderImpl.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoaderImpl.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoaderImpl.java index 48e7db4..e1d4c7d 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoaderImpl.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/init/JobInstanceLoaderImpl.java @@ -35,6 +35,7 @@ import org.apache.syncope.server.persistence.api.entity.task.PushTask; import org.apache.syncope.server.persistence.api.entity.task.SchedTask; import org.apache.syncope.server.persistence.api.entity.task.SyncTask; import org.apache.syncope.server.persistence.api.entity.task.Task; +import org.apache.syncope.server.provisioning.api.job.JobInstanceLoader; import org.apache.syncope.server.provisioning.api.job.JobNamer; import org.apache.syncope.server.provisioning.api.job.SyncJob; import org.apache.syncope.server.provisioning.api.job.TaskJob; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/RoleReportlet.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/RoleReportlet.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/RoleReportlet.java index 756f817..a6f698a 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/RoleReportlet.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/RoleReportlet.java @@ -110,7 +110,7 @@ public class RoleReportlet extends AbstractReportlet<RoleReportletConf> { AttributesImpl atts = new AttributesImpl(); if (!attrs.isEmpty()) { - Map<String, AttrTO> attrMap = attributableTO.getAttrMap(); + Map<String, AttrTO> attrMap = attributableTO.getPlainAttrMap(); handler.startElement("", "", "attributes", null); for (String attrName : attrs) { @@ -233,7 +233,7 @@ public class RoleReportlet extends AbstractReportlet<RoleReportletConf> { // values to String is already encapsulated there RoleTO roleTO = roleDataBinder.getRoleTO(role); - doExtractAttributes(handler, roleTO, conf.getAttrs(), conf.getDerAttrs(), conf.getVirAttrs()); + doExtractAttributes(handler, roleTO, conf.getPlainAttrs(), conf.getDerAttrs(), conf.getVirAttrs()); if (conf.getFeatures().contains(Feature.entitlements)) { handler.startElement("", "", "entitlements", null); @@ -292,7 +292,7 @@ public class RoleReportlet extends AbstractReportlet<RoleReportletConf> { handler.endElement("", "", "feature"); } - for (String attr : conf.getAttrs()) { + for (String attr : conf.getPlainAttrs()) { atts.clear(); handler.startElement("", "", "attribute", atts); handler.characters(attr.toCharArray(), 0, attr.length()); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/UserReportlet.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/UserReportlet.java b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/UserReportlet.java index ebdad43..61b7cd8 100644 --- a/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/UserReportlet.java +++ b/syncope620/server/logic/src/main/java/org/apache/syncope/server/logic/report/UserReportlet.java @@ -117,7 +117,7 @@ public class UserReportlet extends AbstractReportlet<UserReportletConf> { AttributesImpl atts = new AttributesImpl(); if (!attrs.isEmpty()) { - Map<String, AttrTO> attrMap = attributableTO.getAttrMap(); + Map<String, AttrTO> attrMap = attributableTO.getPlainAttrMap(); handler.startElement("", "", "attributes", null); for (String attrName : attrs) { @@ -271,7 +271,7 @@ public class UserReportlet extends AbstractReportlet<UserReportletConf> { // values to String is already encapsulated there UserTO userTO = userDataBinder.getUserTO(user); - doExtractAttributes(handler, userTO, conf.getAttrs(), conf.getDerAttrs(), conf.getVirAttrs()); + doExtractAttributes(handler, userTO, conf.getPlainAttrs(), conf.getDerAttrs(), conf.getVirAttrs()); if (conf.getFeatures().contains(Feature.memberships)) { handler.startElement("", "", "memberships", null); @@ -284,7 +284,7 @@ public class UserReportlet extends AbstractReportlet<UserReportletConf> { atts.addAttribute("", "", "roleName", ReportXMLConst.XSD_STRING, String.valueOf(memb.getRoleName())); handler.startElement("", "", "membership", atts); - doExtractAttributes(handler, memb, memb.getAttrMap().keySet(), memb.getDerAttrMap() + doExtractAttributes(handler, memb, memb.getPlainAttrMap().keySet(), memb.getDerAttrMap() .keySet(), memb.getVirAttrMap().keySet()); if (conf.getFeatures().contains(Feature.resources)) { @@ -324,7 +324,7 @@ public class UserReportlet extends AbstractReportlet<UserReportletConf> { handler.endElement("", "", "feature"); } - for (String attr : conf.getAttrs()) { + for (String attr : conf.getPlainAttrs()) { atts.clear(); handler.startElement("", "", "attribute", atts); handler.characters(attr.toCharArray(), 0, attr.length()); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/test/java/org/apache/syncope/server/logic/NotificationTest.java ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/test/java/org/apache/syncope/server/logic/NotificationTest.java b/syncope620/server/logic/src/test/java/org/apache/syncope/server/logic/NotificationTest.java index de655d8..83a238f 100644 --- a/syncope620/server/logic/src/test/java/org/apache/syncope/server/logic/NotificationTest.java +++ b/syncope620/server/logic/src/test/java/org/apache/syncope/server/logic/NotificationTest.java @@ -262,7 +262,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); Random random = new Random(System.currentTimeMillis()); String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org"; @@ -320,7 +320,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); Random random = new Random(System.currentTimeMillis()); String sender = "syncope192-" + random.nextLong() + "@syncope.apache.org"; @@ -372,7 +372,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); Random random = new Random(System.currentTimeMillis()); String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org"; @@ -422,7 +422,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); Random random = new Random(System.currentTimeMillis()); String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org"; @@ -491,7 +491,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.getStaticRecipients().add("[email protected]"); @@ -549,7 +549,7 @@ public class NotificationTest { notification.setSelfAsRecipient(true); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.getStaticRecipients().add("[email protected]"); @@ -593,7 +593,7 @@ public class NotificationTest { notification.setSelfAsRecipient(false); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.getStaticRecipients().add(MAIL_ADDRESS); @@ -635,7 +635,7 @@ public class NotificationTest { assertNotNull(taskId); assertNotNull(textBody); - assertTrue(recipients.contains(MAIL_ADDRESS)); + assertTrue(recipients != null && recipients.contains(MAIL_ADDRESS)); // 5. execute Notification task and verify e-mail taskLogic.execute(taskId, false); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/logic/src/test/resources/logicTest.xml ---------------------------------------------------------------------- diff --git a/syncope620/server/logic/src/test/resources/logicTest.xml b/syncope620/server/logic/src/test/resources/logicTest.xml index d3b1bd8..afb8730 100644 --- a/syncope620/server/logic/src/test/resources/logicTest.xml +++ b/syncope620/server/logic/src/test/resources/logicTest.xml @@ -41,5 +41,5 @@ under the License. <property name="primary" value="file:${conf.directory}/content.xml"/> <property name="fallback" value="classpath:content.xml"/> </bean> - + </beans> http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/ConnObjectUtil.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/ConnObjectUtil.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/ConnObjectUtil.java index 831a981..592cd0c 100644 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/ConnObjectUtil.java +++ b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/ConnObjectUtil.java @@ -304,8 +304,8 @@ public class ConnObjectUtil { } break; - case UserSchema: - case RoleSchema: + case UserPlainSchema: + case RolePlainSchema: attributeTO = new AttrTO(); attributeTO.setSchema(item.getIntAttrName()); @@ -446,7 +446,7 @@ public class ConnObjectUtil { ((RoleTO) subjectTO).setInheritOwner(((RoleTO) template).isInheritOwner()); ((RoleTO) subjectTO).setInheritTemplates(((RoleTO) template).isInheritTemplates()); - ((RoleTO) subjectTO).setInheritAttrs(((RoleTO) template).isInheritAttrs()); + ((RoleTO) subjectTO).setInheritPlainAttrs(((RoleTO) template).isInheritPlainAttrs()); ((RoleTO) subjectTO).setInheritDerAttrs(((RoleTO) template).isInheritDerAttrs()); ((RoleTO) subjectTO).setInheritVirAttrs(((RoleTO) template).isInheritVirAttrs()); ((RoleTO) subjectTO).setInheritPasswordPolicy(((RoleTO) template).isInheritPasswordPolicy()); @@ -700,7 +700,7 @@ public class ConnObjectUtil { } private void fillFromTemplate(final AbstractAttributableTO attributableTO, final AbstractAttributableTO template) { - Map<String, AttrTO> currentAttrMap = attributableTO.getAttrMap(); + Map<String, AttrTO> currentAttrMap = attributableTO.getPlainAttrMap(); for (AttrTO templateAttr : template.getPlainAttrs()) { if (templateAttr.getValues() != null && !templateAttr.getValues().isEmpty() && (!currentAttrMap.containsKey(templateAttr.getSchema()) http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/MappingUtil.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/MappingUtil.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/MappingUtil.java index 7ae586f..209c800 100644 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/MappingUtil.java +++ b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/MappingUtil.java @@ -303,9 +303,9 @@ public final class MappingUtil { final Map.Entry<String, Attribute> result; switch (mapItem.getIntMappingType()) { - case UserSchema: - case RoleSchema: - case MembershipSchema: + case UserPlainSchema: + case RolePlainSchema: + case MembershipPlainSchema: final PlainSchemaDAO plainSchemaDAO = context.getBean(PlainSchemaDAO.class); schema = plainSchemaDAO.find(mapItem.getIntAttrName(), MappingUtil.getIntMappingTypeClass(mapItem.getIntMappingType())); @@ -487,9 +487,9 @@ public final class MappingUtil { List<PlainAttrValue> values = new ArrayList<>(); PlainAttrValue attrValue; switch (mappingItem.getIntMappingType()) { - case UserSchema: - case RoleSchema: - case MembershipSchema: + case UserPlainSchema: + case RolePlainSchema: + case MembershipPlainSchema: for (Attributable<?, ?, ?> attributable : attributables) { final PlainAttr attr = attributable.getPlainAttr(mappingItem.getIntAttrName()); if (attr != null) { @@ -687,15 +687,15 @@ public final class MappingUtil { Class result; switch (intMappingType) { - case UserSchema: + case UserPlainSchema: result = UPlainSchema.class; break; - case RoleSchema: + case RolePlainSchema: result = RPlainSchema.class; break; - case MembershipSchema: + case MembershipPlainSchema: result = MPlainSchema.class; break; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/AccountPolicyEnforcer.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/AccountPolicyEnforcer.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/AccountPolicyEnforcer.java index f850b98..002a588 100644 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/AccountPolicyEnforcer.java +++ b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/AccountPolicyEnforcer.java @@ -22,6 +22,7 @@ import java.util.regex.Pattern; import org.apache.syncope.common.lib.types.AccountPolicySpec; import org.apache.syncope.common.lib.types.PolicyType; import org.apache.syncope.server.persistence.api.entity.user.User; +import org.apache.syncope.server.provisioning.api.UserSuspender; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/PasswordPolicyEnforcer.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/PasswordPolicyEnforcer.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/PasswordPolicyEnforcer.java index ac8513d..8bbc734 100644 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/PasswordPolicyEnforcer.java +++ b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/PasswordPolicyEnforcer.java @@ -26,11 +26,6 @@ import org.springframework.stereotype.Component; @Component public class PasswordPolicyEnforcer implements PolicyEnforcer<PasswordPolicySpec, User> { - /* (non-Javadoc) - * @see - * org.apache.syncope.core.policy.PasswordPolicyEnforcer#enforce(org.apache.syncope.common.types.PasswordPolicySpec, - * org.apache.syncope.common.types.PolicyType, java.lang.String) - */ @Override public void enforce(final PasswordPolicySpec policy, final PolicyType type, final User user) throws PasswordPolicyException, PolicyEnforceException { @@ -43,7 +38,7 @@ public class PasswordPolicyEnforcer implements PolicyEnforcer<PasswordPolicySpec } if (password == null && !policy.isAllowNullPassword()) { - throw new PolicyEnforceException("Password must not be null and must be stored internally"); + throw new PolicyEnforceException("Password mandatory"); } else if (password != null && clearPassword != null) { // check length if (policy.getMinLength() > 0 && policy.getMinLength() > clearPassword.length()) { http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/UserSuspender.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/UserSuspender.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/UserSuspender.java deleted file mode 100644 index 1fbf6f6..0000000 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/policy/UserSuspender.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.server.misc.policy; - -import org.apache.syncope.server.persistence.api.entity.user.User; - -public interface UserSuspender { - - void suspend(User user, boolean propagateSuspension); -} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/security/AuthContextUtil.java ---------------------------------------------------------------------- diff --git a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/security/AuthContextUtil.java b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/security/AuthContextUtil.java index e58a157..870b444 100644 --- a/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/security/AuthContextUtil.java +++ b/syncope620/server/misc/src/main/java/org/apache/syncope/server/misc/security/AuthContextUtil.java @@ -59,7 +59,7 @@ public final class AuthContextUtil { */ public static void extendAuthContext(final Long roleKey, final String roleEntitlement) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(auth.getAuthorities()); + List<GrantedAuthority> authorities = new ArrayList<>(auth.getAuthorities()); authorities.add(new SimpleGrantedAuthority(roleEntitlement)); Authentication newAuth = new UsernamePasswordAuthenticationToken( auth.getPrincipal(), auth.getCredentials(), authorities); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/content/XMLContentExporter.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/content/XMLContentExporter.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/content/XMLContentExporter.java index 90bbbee..3456431 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/content/XMLContentExporter.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/content/XMLContentExporter.java @@ -86,6 +86,9 @@ public class XMLContentExporter extends AbstractContentDealer implements Content JPAMDerAttr.TABLE, JPAMVirAttr.TABLE })); + protected final static Set<String> TABLE_SUFFIXES_TO_BE_INCLUDED = + new HashSet<>(Arrays.asList(new String[] { "TEMPLATE" })); + protected static final Map<String, String> TABLES_TO_BE_FILTERED = Collections.singletonMap("TASK", "DTYPE <> 'PropagationTask'"); @@ -96,7 +99,11 @@ public class XMLContentExporter extends AbstractContentDealer implements Content boolean allowed = true; for (String prefix : TABLE_PREFIXES_TO_BE_EXCLUDED) { if (tableName.toUpperCase().startsWith(prefix)) { - allowed = false; + for (String suffix : TABLE_SUFFIXES_TO_BE_INCLUDED) { + if (!tableName.toUpperCase().endsWith(suffix)) { + allowed = false; + } + } } } return allowed; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPASubjectSearchDAO.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPASubjectSearchDAO.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPASubjectSearchDAO.java index f4475f8..36d48e7 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPASubjectSearchDAO.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPASubjectSearchDAO.java @@ -20,6 +20,7 @@ package org.apache.syncope.server.persistence.jpa.dao; import java.lang.annotation.Annotation; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -31,6 +32,7 @@ import javax.persistence.TemporalType; import javax.validation.ValidationException; import javax.validation.constraints.Max; import javax.validation.constraints.Min; +import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.types.AttrSchemaType; import org.apache.syncope.common.lib.types.SubjectType; @@ -50,7 +52,6 @@ import org.apache.syncope.server.persistence.api.entity.AttributableUtilFactory; import org.apache.syncope.server.persistence.api.entity.PlainAttrValue; import org.apache.syncope.server.persistence.api.entity.PlainSchema; import org.apache.syncope.server.persistence.api.entity.Subject; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; @@ -652,6 +653,11 @@ public class JPASubjectSearchDAO extends AbstractDAO<Subject<?, ?, ?>, Long> imp final AttributableUtil attrUtil = attrUtilFactory.getInstance(type.asAttributableType()); + // Keeps track of difference between entity's getKey() and JPA @Id fields + if ("key".equals(cond.getSchema())) { + cond.setSchema("id"); + } + Field subjectField = ReflectionUtils.findField(attrUtil.attributableClass(), cond.getSchema()); if (subjectField == null) { LOG.warn("Ignoring invalid schema '{}'", cond.getSchema()); @@ -685,13 +691,22 @@ public class JPASubjectSearchDAO extends AbstractDAO<Subject<?, ?, ?>, Long> imp // Deal with subject fields representing relationships to other entities if (subjectField.getType().getAnnotation(Entity.class) != null) { - if (BeanUtils.findDeclaredMethodWithMinimalParameters(subjectField.getType(), "getId") != null) { - cond.setSchema(cond.getSchema() + "_id"); - schema.setType(AttrSchemaType.Long); + Method relMethod = null; + try { + relMethod = ClassUtils.getPublicMethod(subjectField.getType(), "getKey", new Class[0]); + } catch (Exception e) { + LOG.error("Could not find {}#getKey", subjectField.getType(), e); } - if (BeanUtils.findDeclaredMethodWithMinimalParameters(subjectField.getType(), "getName") != null) { - cond.setSchema(cond.getSchema() + "_name"); - schema.setType(AttrSchemaType.String); + + if (relMethod != null) { + if (Long.class.isAssignableFrom(relMethod.getReturnType())) { + cond.setSchema(cond.getSchema() + "_id"); + schema.setType(AttrSchemaType.Long); + } + if (String.class.isAssignableFrom(relMethod.getReturnType())) { + cond.setSchema(cond.getSchema() + "_name"); + schema.setType(AttrSchemaType.String); + } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPATaskDAO.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPATaskDAO.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPATaskDAO.java index 954697c..e0d2313 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPATaskDAO.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPATaskDAO.java @@ -144,7 +144,7 @@ public class JPATaskDAO extends AbstractDAO<Task, Long> implements TaskDAO { @Override public int count(final TaskType type) { Query countQuery = entityManager.createNativeQuery("SELECT COUNT(id) FROM Task WHERE TYPE=?1"); - countQuery.setParameter(1, type.toString()); + countQuery.setParameter(1, type.name()); return ((Number) countQuery.getSingleResult()).intValue(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPAUserDAO.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPAUserDAO.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPAUserDAO.java index 30fdca5..2a45ad3 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPAUserDAO.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/dao/JPAUserDAO.java @@ -51,6 +51,7 @@ import org.apache.syncope.server.misc.security.AuthContextUtil; import org.apache.syncope.server.misc.security.UnauthorizedRoleException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; @Repository public class JPAUserDAO extends AbstractSubjectDAO<UPlainAttr, UDerAttr, UVirAttr> implements UserDAO { @@ -249,6 +250,7 @@ public class JPAUserDAO extends AbstractSubjectDAO<UPlainAttr, UDerAttr, UVirAtt } } + @Transactional(readOnly = true) @Override public User authFetch(final Long key) { if (key == null) { @@ -265,6 +267,7 @@ public class JPAUserDAO extends AbstractSubjectDAO<UPlainAttr, UDerAttr, UVirAtt return user; } + @Transactional(readOnly = true) @Override public User authFetch(final String username) { if (username == null) { http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractAttrTemplate.java index 3c79c92..fe78889 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractAttrTemplate.java @@ -18,25 +18,11 @@ */ package org.apache.syncope.server.persistence.jpa.entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.MappedSuperclass; import org.apache.syncope.server.persistence.api.entity.AttrTemplate; import org.apache.syncope.server.persistence.api.entity.Schema; -@MappedSuperclass public abstract class AbstractAttrTemplate<S extends Schema> extends AbstractEntity<Long> implements AttrTemplate<S> { private static final long serialVersionUID = 4829112252713766666L; - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - protected Long id; - - @Override - public Long getKey() { - return id; - } - } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractDerAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractDerAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractDerAttrTemplate.java new file mode 100644 index 0000000..2dec16a --- /dev/null +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractDerAttrTemplate.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.server.persistence.jpa.entity; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import org.apache.syncope.server.persistence.api.entity.DerSchema; + +@MappedSuperclass +public abstract class AbstractDerAttrTemplate<D extends DerSchema> extends AbstractAttrTemplate<D> { + + private static final long serialVersionUID = 8871895736733379865L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + protected Long id; + + @Override + public Long getKey() { + return id; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainAttrTemplate.java new file mode 100644 index 0000000..f8b0150 --- /dev/null +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainAttrTemplate.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.server.persistence.jpa.entity; + +import org.apache.syncope.server.persistence.api.entity.PlainSchema; + +public abstract class AbstractPlainAttrTemplate<P extends PlainSchema> extends AbstractAttrTemplate<P> { + + private static final long serialVersionUID = -943169893494860655L; + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainSchema.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainSchema.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainSchema.java index ecc6fd5..78356bf 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainSchema.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractPlainSchema.java @@ -29,6 +29,7 @@ import javax.persistence.MappedSuperclass; import javax.persistence.Transient; import javax.validation.constraints.Max; import javax.validation.constraints.Min; +import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.types.AttrSchemaType; import org.apache.syncope.common.lib.types.CipherAlgorithm; import org.apache.syncope.server.persistence.api.attrvalue.validation.Validator; @@ -231,7 +232,7 @@ public abstract class AbstractPlainSchema extends AbstractEntity<String> impleme @Override public void setConversionPattern(final String conversionPattern) { - if (!getType().isConversionPatternNeeded()) { + if (StringUtils.isNotBlank(conversionPattern) && !getType().isConversionPatternNeeded()) { LOG.warn("Conversion pattern will be ignored: this attribute type is {}", getType()); } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractVirAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractVirAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractVirAttrTemplate.java new file mode 100644 index 0000000..5a3b2e4 --- /dev/null +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/AbstractVirAttrTemplate.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.server.persistence.jpa.entity; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import org.apache.syncope.server.persistence.api.entity.VirSchema; + +@MappedSuperclass +public abstract class AbstractVirAttrTemplate<V extends VirSchema> extends AbstractAttrTemplate<V> { + + private static final long serialVersionUID = -943169893494860655L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + protected Long id; + + @Override + public Long getKey() { + return id; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAAttributableUtil.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAAttributableUtil.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAAttributableUtil.java index bf468ce..94f95a8 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAAttributableUtil.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAAttributableUtil.java @@ -744,15 +744,15 @@ public class JPAAttributableUtil implements AttributableUtil { switch (type) { case ROLE: - result = IntMappingType.RoleSchema; + result = IntMappingType.RolePlainSchema; break; case MEMBERSHIP: - result = IntMappingType.MembershipSchema; + result = IntMappingType.MembershipPlainSchema; break; case USER: - result = IntMappingType.UserSchema; + result = IntMappingType.UserPlainSchema; break; case CONFIGURATION: @@ -768,15 +768,15 @@ public class JPAAttributableUtil implements AttributableUtil { switch (type) { case ROLE: - result = IntMappingType.RoleSchema; + result = IntMappingType.RoleDerivedSchema; break; case MEMBERSHIP: - result = IntMappingType.MembershipSchema; + result = IntMappingType.MembershipDerivedSchema; break; case USER: - result = IntMappingType.UserSchema; + result = IntMappingType.UserDerivedSchema; break; case CONFIGURATION: http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAConnInstance.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAConnInstance.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAConnInstance.java index 2c1e956..28e1c87 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAConnInstance.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAConnInstance.java @@ -186,7 +186,7 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc if (!StringUtils.isBlank(jsonConf)) { ConnConfProperty[] deserialized = POJOHelper.deserialize(jsonConf, ConnConfProperty[].class); if (ArrayUtils.isNotEmpty(deserialized)) { - configuration = new HashSet<ConnConfProperty>(Arrays.asList(deserialized)); + configuration = new HashSet<>(Arrays.asList(deserialized)); } } @@ -195,7 +195,7 @@ public class JPAConnInstance extends AbstractEntity<Long> implements ConnInstanc @Override public void setConfiguration(final Set<ConnConfProperty> configuration) { - jsonConf = POJOHelper.serialize(new HashSet<ConnConfProperty>(configuration)); + jsonConf = POJOHelper.serialize(new HashSet<>(configuration)); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAReport.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAReport.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAReport.java index d045bcf..8b01c60 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAReport.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/JPAReport.java @@ -113,8 +113,6 @@ public class JPAReport extends AbstractEntity<Long> implements Report { return false; } - checkType(reportletConf, JPAReportletConfInstance.class); - JPAReportletConfInstance found = null; for (JPAReportletConfInstance instance : reportletConfs) { if (reportletConf.equals(instance.getInstance())) { http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMDerAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMDerAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMDerAttrTemplate.java index a106453..f52627c 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMDerAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMDerAttrTemplate.java @@ -25,12 +25,12 @@ import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.membership.MDerAttrTemplate; import org.apache.syncope.server.persistence.api.entity.membership.MDerSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractDerAttrTemplate; import org.apache.syncope.server.persistence.jpa.entity.role.JPARole; @Entity @Table(name = JPAMDerAttrTemplate.TABLE) -public class JPAMDerAttrTemplate extends AbstractAttrTemplate<MDerSchema> implements MDerAttrTemplate { +public class JPAMDerAttrTemplate extends AbstractDerAttrTemplate<MDerSchema> implements MDerAttrTemplate { private static final long serialVersionUID = -4465930976210263434L; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMPlainAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMPlainAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMPlainAttrTemplate.java index 5fdf9ec..5f33b8c 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMPlainAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMPlainAttrTemplate.java @@ -19,23 +19,27 @@ package org.apache.syncope.server.persistence.jpa.entity.membership; import javax.persistence.Entity; +import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.membership.MPlainAttrTemplate; import org.apache.syncope.server.persistence.api.entity.membership.MPlainSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractPlainAttrTemplate; import org.apache.syncope.server.persistence.jpa.entity.role.JPARole; @Entity @Table(name = JPAMPlainAttrTemplate.TABLE) -public class JPAMPlainAttrTemplate extends AbstractAttrTemplate<MPlainSchema> implements MPlainAttrTemplate { +public class JPAMPlainAttrTemplate extends AbstractPlainAttrTemplate<MPlainSchema> implements MPlainAttrTemplate { private static final long serialVersionUID = -8768086609963244514L; public static final String TABLE = "MPlainAttrTemplate"; + @Id + private Long id; + @ManyToOne private JPARole owner; @@ -44,6 +48,11 @@ public class JPAMPlainAttrTemplate extends AbstractAttrTemplate<MPlainSchema> im private JPAMPlainSchema schema; @Override + public Long getKey() { + return id; + } + + @Override public MPlainSchema getSchema() { return schema; } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMVirAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMVirAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMVirAttrTemplate.java index 241d28c..1d7e184 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMVirAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/membership/JPAMVirAttrTemplate.java @@ -25,12 +25,12 @@ import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.membership.MVirAttrTemplate; import org.apache.syncope.server.persistence.api.entity.membership.MVirSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractVirAttrTemplate; import org.apache.syncope.server.persistence.jpa.entity.role.JPARole; @Entity @Table(name = JPAMVirAttrTemplate.TABLE) -public class JPAMVirAttrTemplate extends AbstractAttrTemplate<MVirSchema> implements MVirAttrTemplate { +public class JPAMVirAttrTemplate extends AbstractVirAttrTemplate<MVirSchema> implements MVirAttrTemplate { private static final long serialVersionUID = 6618560912535667392L; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARDerAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARDerAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARDerAttrTemplate.java index 3686f48..7ddc20f 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARDerAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARDerAttrTemplate.java @@ -25,11 +25,11 @@ import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.role.RDerAttrTemplate; import org.apache.syncope.server.persistence.api.entity.role.RDerSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractDerAttrTemplate; @Entity @Table(name = JPARDerAttrTemplate.TABLE) -public class JPARDerAttrTemplate extends AbstractAttrTemplate<RDerSchema> implements RDerAttrTemplate { +public class JPARDerAttrTemplate extends AbstractDerAttrTemplate<RDerSchema> implements RDerAttrTemplate { private static final long serialVersionUID = 624868884107016649L; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARPlainAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARPlainAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARPlainAttrTemplate.java index 9c0e603..fa6e8ee 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARPlainAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARPlainAttrTemplate.java @@ -19,25 +19,34 @@ package org.apache.syncope.server.persistence.jpa.entity.role; import javax.persistence.Entity; +import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.role.RPlainAttrTemplate; import org.apache.syncope.server.persistence.api.entity.role.RPlainSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractPlainAttrTemplate; @Entity @Table(name = JPARPlainAttrTemplate.TABLE) -public class JPARPlainAttrTemplate extends AbstractAttrTemplate<RPlainSchema> implements RPlainAttrTemplate { +public class JPARPlainAttrTemplate extends AbstractPlainAttrTemplate<RPlainSchema> implements RPlainAttrTemplate { private static final long serialVersionUID = 6943917051517266268L; public static final String TABLE = "RPlainAttrTemplate"; + @Id + private Long id; + @ManyToOne private JPARole owner; + @Override + public Long getKey() { + return id; + } + @ManyToOne @JoinColumn(name = "schema_name") private JPARPlainSchema schema; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARVirAttrTemplate.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARVirAttrTemplate.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARVirAttrTemplate.java index 1de733a..74200db 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARVirAttrTemplate.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/role/JPARVirAttrTemplate.java @@ -25,11 +25,11 @@ import javax.persistence.Table; import org.apache.syncope.server.persistence.api.entity.role.RVirAttrTemplate; import org.apache.syncope.server.persistence.api.entity.role.RVirSchema; import org.apache.syncope.server.persistence.api.entity.role.Role; -import org.apache.syncope.server.persistence.jpa.entity.AbstractAttrTemplate; +import org.apache.syncope.server.persistence.jpa.entity.AbstractVirAttrTemplate; @Entity @Table(name = JPARVirAttrTemplate.TABLE) -public class JPARVirAttrTemplate extends AbstractAttrTemplate<RVirSchema> implements RVirAttrTemplate { +public class JPARVirAttrTemplate extends AbstractVirAttrTemplate<RVirSchema> implements RVirAttrTemplate { private static final long serialVersionUID = 4896495904794493479L; http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/task/JPATaskUtil.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/task/JPATaskUtil.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/task/JPATaskUtil.java index 4086018..178d2b0 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/task/JPATaskUtil.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/entity/task/JPATaskUtil.java @@ -80,12 +80,33 @@ public final class JPATaskUtil implements TaskUtil { @Override public <T extends Task> T newTask() { - final Class<T> taskClass = taskClass(); - try { - return taskClass == null ? null : taskClass.newInstance(); - } catch (Exception e) { - return null; + T result = null; + + switch (type) { + case PROPAGATION: + result = (T) new JPAPropagationTask(); + break; + + case SCHEDULED: + result = (T) new JPASchedTask(); + break; + + case SYNCHRONIZATION: + result = (T) new JPASyncTask(); + break; + + case PUSH: + result = (T) new JPAPushTask(); + break; + + case NOTIFICATION: + result = (T) new JPANotificationTask(); + break; + + default: } + + return result; } @Override @@ -119,7 +140,6 @@ public final class JPATaskUtil implements TaskUtil { return result; } - @SuppressWarnings("unchecked") @Override public <T extends AbstractTaskTO> T newTaskTO() { final Class<T> taskClass = taskTOClass(); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/validation/entity/EntityValidationListener.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/validation/entity/EntityValidationListener.java b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/validation/entity/EntityValidationListener.java index bd40a4c..5f8c89d 100644 --- a/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/validation/entity/EntityValidationListener.java +++ b/syncope620/server/persistence-jpa/src/main/java/org/apache/syncope/server/persistence/jpa/validation/entity/EntityValidationListener.java @@ -23,8 +23,17 @@ import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.validation.ConstraintViolation; import javax.validation.Validator; +import org.apache.commons.lang3.ClassUtils; import org.apache.syncope.server.persistence.api.attrvalue.validation.InvalidEntityException; import org.apache.syncope.server.misc.spring.ApplicationContextProvider; +import org.apache.syncope.server.persistence.api.entity.AnnotatedEntity; +import org.apache.syncope.server.persistence.api.entity.Attr; +import org.apache.syncope.server.persistence.api.entity.Attributable; +import org.apache.syncope.server.persistence.api.entity.Entity; +import org.apache.syncope.server.persistence.api.entity.Policy; +import org.apache.syncope.server.persistence.api.entity.Schema; +import org.apache.syncope.server.persistence.api.entity.Subject; +import org.apache.syncope.server.persistence.api.entity.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +54,24 @@ public class EntityValidationListener { Set<ConstraintViolation<Object>> violations = validator.validate(object); if (!violations.isEmpty()) { LOG.warn("Bean validation errors found: {}", violations); - throw new InvalidEntityException(object.getClass().getSimpleName(), violations); + + Class<?> entityInt = null; + for (Class<?> interf : ClassUtils.getAllInterfaces(object.getClass())) { + if (!Entity.class.equals(interf) + && !AnnotatedEntity.class.equals(interf) + && !Schema.class.equals(interf) + && !Attr.class.equals(interf) + && !Task.class.equals(interf) + && !Policy.class.equals(interf) + && !Attributable.class.equals(interf) + && !Subject.class.equals(interf) + && Entity.class.isAssignableFrom(interf)) { + + entityInt = interf; + } + } + + throw new InvalidEntityException(entityInt == null ? "Entity" : entityInt.getSimpleName(), violations); } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/main/resources/META-INF/orm.xml ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/main/resources/META-INF/orm.xml b/syncope620/server/persistence-jpa/src/main/resources/META-INF/orm.xml index 9a828d4..93bc24d 100644 --- a/syncope620/server/persistence-jpa/src/main/resources/META-INF/orm.xml +++ b/syncope620/server/persistence-jpa/src/main/resources/META-INF/orm.xml @@ -124,11 +124,27 @@ under the License. </id> </attributes> </entity> + <entity class="org.apache.syncope.server.persistence.jpa.entity.role.JPARPlainAttrTemplate"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_RPlainAttrTemplate" strategy="TABLE"/> + <table-generator name="SEQ_RPlainAttrTemplate" pk-column-value="SEQ_RPlainAttrTemplate" initial-value="1000"/> + </id> + </attributes> + </entity> <entity class="org.apache.syncope.server.persistence.jpa.entity.membership.JPAMPlainAttr"> <attributes> <id name="id"> - <generated-value generator="SEQ_MAttrPlain" strategy="TABLE"/> - <table-generator name="SEQ_MAttrPlain" pk-column-value="SEQ_MAttrPlain" initial-value="1000"/> + <generated-value generator="SEQ_MPlainAttr" strategy="TABLE"/> + <table-generator name="SEQ_MPlainAttr" pk-column-value="SEQ_MPlainAttr" initial-value="1000"/> + </id> + </attributes> + </entity> + <entity class="org.apache.syncope.server.persistence.jpa.entity.membership.JPAMPlainAttrTemplate"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_MPlainAttrTemplate" strategy="TABLE"/> + <table-generator name="SEQ_MPlainAttrTemplate" pk-column-value="SEQ_MPlainAttrTemplate" initial-value="1000"/> </id> </attributes> </entity> http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/AttributableSearchTest.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/AttributableSearchTest.java b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/AttributableSearchTest.java index 4b6345b..9eaa312 100644 --- a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/AttributableSearchTest.java +++ b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/AttributableSearchTest.java @@ -131,7 +131,7 @@ public class AttributableSearchTest extends AbstractTest { assertNotNull(users); assertEquals(4, users.size()); - Set<Long> ids = new HashSet<Long>(users.size()); + Set<Long> ids = new HashSet<>(users.size()); for (User user : users) { ids.add(user.getKey()); } @@ -254,16 +254,30 @@ public class AttributableSearchTest extends AbstractTest { } @Test - public void searchByUsernameAndId() { - SubjectCond usernameLeafCond = new SubjectCond(SubjectCond.Type.EQ); + public void searchByBooleanSubjectCond() { + SubjectCond booleanCond = new SubjectCond(SubjectCond.Type.EQ); + booleanCond.setSchema("inheritPlainAttrs"); + booleanCond.setExpression("true"); + + SearchCond searchCondition = SearchCond.getLeafCond(booleanCond); + + List<Role> matchingRoles = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.ROLE); + assertNotNull(matchingRoles); + assertFalse(matchingRoles.isEmpty()); + } + + @Test + public void searchByUsernameAndKey() { + SubjectCond usernameLeafCond = new SubjectCond(SubjectCond.Type.LIKE); usernameLeafCond.setSchema("username"); - usernameLeafCond.setExpression("rossini"); + usernameLeafCond.setExpression("%ini"); SubjectCond idRightCond = new SubjectCond(SubjectCond.Type.LT); - idRightCond.setSchema("id"); + idRightCond.setSchema("key"); idRightCond.setExpression("2"); - SearchCond searchCondition = SearchCond.getOrCond(SearchCond.getLeafCond(usernameLeafCond), + SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getLeafCond(usernameLeafCond), SearchCond.getLeafCond(idRightCond)); List<User> matchingUsers = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), @@ -276,13 +290,13 @@ public class AttributableSearchTest extends AbstractTest { } @Test - public void searchByRolenameAndId() { + public void searchByRolenameAndKey() { SubjectCond rolenameLeafCond = new SubjectCond(SubjectCond.Type.EQ); rolenameLeafCond.setSchema("name"); rolenameLeafCond.setExpression("root"); SubjectCond idRightCond = new SubjectCond(SubjectCond.Type.LT); - idRightCond.setSchema("id"); + idRightCond.setSchema("key"); idRightCond.setExpression("2"); SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getLeafCond(rolenameLeafCond), http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/NotificationTest.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/NotificationTest.java b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/NotificationTest.java index 7cd9eae..91ad890 100644 --- a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/NotificationTest.java +++ b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/NotificationTest.java @@ -65,7 +65,7 @@ public class NotificationTest extends AbstractTest { notification.setRecipients("fake search condition"); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.setSender("[email protected]"); notification.setSubject("Test notification"); @@ -92,7 +92,7 @@ public class NotificationTest extends AbstractTest { notification.setRecipients("fake search condition"); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.addStaticRecipient("[email protected]"); @@ -115,7 +115,7 @@ public class NotificationTest extends AbstractTest { notification.setRoleAbout("fake search condition"); notification.setRecipientAttrName("email"); - notification.setRecipientAttrType(IntMappingType.UserSchema); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); notification.addStaticRecipient("[email protected]"); http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/ResourceTest.java ---------------------------------------------------------------------- diff --git a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/ResourceTest.java b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/ResourceTest.java index c1c2355..68d1516 100644 --- a/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/ResourceTest.java +++ b/syncope620/server/persistence-jpa/src/test/java/org/apache/syncope/server/persistence/jpa/entity/ResourceTest.java @@ -133,7 +133,7 @@ public class ResourceTest extends AbstractTest { UMappingItem accountId = entityFactory.newEntity(UMappingItem.class); accountId.setAccountid(true); - accountId.setIntMappingType(IntMappingType.UserSchema); + accountId.setIntMappingType(IntMappingType.UserPlainSchema); mapping.addItem(accountId); // save the resource @@ -176,12 +176,12 @@ public class ResourceTest extends AbstractTest { UMappingItem item = entityFactory.newEntity(UMappingItem.class); item.setAccountid(true); item.setIntAttrName("fullname"); - item.setIntMappingType(IntMappingType.UserSchema); + item.setIntMappingType(IntMappingType.UserPlainSchema); mapping.addItem(item); item = entityFactory.newEntity(UMappingItem.class); item.setIntAttrName("userId"); - item.setIntMappingType(IntMappingType.UserSchema); + item.setIntMappingType(IntMappingType.UserPlainSchema); mapping.addItem(item); ExternalResource actual = resourceDAO.save(resource); @@ -202,14 +202,14 @@ public class ResourceTest extends AbstractTest { UMappingItem item = entityFactory.newEntity(UMappingItem.class); item.setIntAttrName("fullname"); item.setExtAttrName("fullname"); - item.setIntMappingType(IntMappingType.UserSchema); + item.setIntMappingType(IntMappingType.UserPlainSchema); item.setPurpose(MappingPurpose.BOTH); mapping.setAccountIdItem(item); item = entityFactory.newEntity(UMappingItem.class); item.setIntAttrName("icon"); item.setExtAttrName("icon"); - item.setIntMappingType(IntMappingType.RoleSchema); + item.setIntMappingType(IntMappingType.RolePlainSchema); item.setPurpose(MappingPurpose.BOTH); mapping.addItem(item);
