You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by cs...@apache.org on 2013/01/14 19:21:24 UTC
svn commit: r1433021 - in /syncope/trunk: ./
core/src/main/java/org/apache/syncope/core/init/
core/src/main/java/org/apache/syncope/core/persistence/dao/impl/
core/src/main/java/org/apache/syncope/core/policy/
core/src/main/java/org/apache/syncope/core...
Author: cschneider
Date: Mon Jan 14 18:21:24 2013
New Revision: 1433021
URL: http://svn.apache.org/viewvc?rev=1433021&view=rev
Log:
SYNCOPE-241 Make persistence tests self contained so persistence can be moved to its own module
Added:
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java (with props)
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowInstanceLoader.java
- copied, changed from r1432115, syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowLoader.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java (with props)
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java (with props)
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java (with props)
syncope/trunk/core/src/test/resources/persistenceTestEnv.xml (with props)
Removed:
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ContentLoader.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/impl/
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowLoader.java
Modified:
syncope/trunk/ (props changed)
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/SpringContextInitializer.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowAdapter.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/role/AbstractRoleWorkflowAdapter.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/AbstractUserWorkflowAdapter.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiWorkflowLoader.java
syncope/trunk/core/src/main/resources/persistenceContext.xml
syncope/trunk/core/src/main/resources/syncopeContext.xml
syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AbstractDAOTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/WorkflowTestITCase.java
Propchange: syncope/trunk/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Jan 14 18:21:24 2013
@@ -3,3 +3,7 @@ target
.pom.xml.swp
.CHANGES.swp
.vi.swp
+
+.settings
+
+.project
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/init/SpringContextInitializer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/SpringContextInitializer.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/init/SpringContextInitializer.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/init/SpringContextInitializer.java Mon Jan 14 18:21:24 2013
@@ -18,24 +18,13 @@
*/
package org.apache.syncope.core.init;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
import javax.servlet.ServletContext;
+
+import org.apache.syncope.core.persistence.dao.impl.ContentLoader;
import org.apache.syncope.core.propagation.ConnectorFactory;
-import org.apache.syncope.core.workflow.WorkflowLoader;
-import org.apache.syncope.core.workflow.role.RoleWorkflowAdapter;
-import org.apache.syncope.core.workflow.user.UserWorkflowAdapter;
-import org.apache.syncope.core.workflow.user.activiti.ActivitiUserWorkflowAdapter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.BeanFactoryAware;
+import org.apache.syncope.core.workflow.ActivitiDetector;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;
@@ -43,66 +32,7 @@ import org.springframework.web.context.S
* Take care of all initializations needed by Syncope to run up and safe.
*/
@Component
-public class SpringContextInitializer implements ServletContextAware, BeanFactoryAware, InitializingBean {
-
- /**
- * Logger.
- */
- private static final Logger LOG = LoggerFactory.getLogger(SpringContextInitializer.class);
-
- private static String uwfAdapterClassName;
-
- private static String rwfAdapterClassName;
-
- static {
- try {
- initWFAdapterClassNames();
- } catch (IOException e) {
- LOG.error("Could not init uwfAdapterClassName", e);
- }
- }
-
- /**
- * Read classpath:/workflow.properties in order to determine the configured workflow adapter class name.
- *
- * @throws IOException if anything goes wrong
- */
- private static void initWFAdapterClassNames() throws IOException {
- Properties props = new java.util.Properties();
- InputStream propStream = null;
- try {
- propStream = ContentLoader.class.getResourceAsStream("/workflow.properties");
- props.load(propStream);
- uwfAdapterClassName = props.getProperty("uwfAdapter");
- rwfAdapterClassName = props.getProperty("rwfAdapter");
- } catch (Exception e) {
- LOG.error("Could not load workflow.properties", e);
- } finally {
- if (propStream != null) {
- propStream.close();
- }
- }
- }
-
- /**
- * Check if the configured user workflow adapter is Activiti's.
- *
- * @return whether Activiti is configured for user workflow or not
- */
- public static boolean isActivitiEnabledForUsers() {
- return uwfAdapterClassName != null && uwfAdapterClassName.equals(ActivitiUserWorkflowAdapter.class.getName());
- }
-
- /**
- * Check if the configured role workflow adapter is Activiti's.
- *
- * @return whether Activiti is configured for role workflow or not
- */
- public static boolean isActivitiEnabledForRoles() {
- // ActivitiRoleWorkflowAdapter hasn't been developed (yet) as part of SYNCOPE-173
- //return rwfAdapterClassName != null && rwfAdapterClassName.equals(ActivitiRoleWorkflowAdapter.class.getName());
- return false;
- }
+public class SpringContextInitializer implements ServletContextAware, InitializingBean {
@Autowired
private ConnectorFactory connInstanceLoader;
@@ -114,45 +44,25 @@ public class SpringContextInitializer im
private JobInstanceLoader jobInstanceLoader;
@Autowired
- private UserWorkflowAdapter uwfAdapter;
-
- @Autowired
- private RoleWorkflowAdapter rwfAdapter;
-
- @Autowired
private LoggerLoader loggerLoader;
@Autowired
private ImplementationClassNamesLoader classNamesLoader;
-
- private DefaultListableBeanFactory beanFactory;
+
+ @Autowired
+ private WorkflowAdapterLoader workflowSetup;
@Override
public void setServletContext(final ServletContext servletContext) {
}
@Override
- public void setBeanFactory(final BeanFactory beanFactory) throws BeansException {
- this.beanFactory = (DefaultListableBeanFactory) beanFactory;
- }
-
- @Override
public void afterPropertiesSet() throws Exception {
- contentLoader.load();
+ contentLoader.load(ActivitiDetector.isActivitiEnabledForUsers());
connInstanceLoader.load();
jobInstanceLoader.load();
loggerLoader.load();
classNamesLoader.load();
-
- if (uwfAdapter.getLoaderClass() != null) {
- final WorkflowLoader wfLoader = (WorkflowLoader) beanFactory.createBean(
- uwfAdapter.getLoaderClass(), AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
- wfLoader.load();
- }
- if (rwfAdapter.getLoaderClass() != null) {
- final WorkflowLoader wfLoader = (WorkflowLoader) beanFactory.createBean(
- rwfAdapter.getLoaderClass(), AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
- wfLoader.load();
- }
+ workflowSetup.load();
}
}
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,59 @@
+/*
+ * 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.core.init;
+
+import org.apache.syncope.core.workflow.WorkflowInstanceLoader;
+import org.apache.syncope.core.workflow.role.RoleWorkflowAdapter;
+import org.apache.syncope.core.workflow.user.UserWorkflowAdapter;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WorkflowAdapterLoader implements BeanFactoryAware {
+ @Autowired
+ private UserWorkflowAdapter uwfAdapter;
+
+ @Autowired
+ private RoleWorkflowAdapter rwfAdapter;
+
+ private DefaultListableBeanFactory beanFactory;
+
+ @Override
+ public void setBeanFactory(final BeanFactory beanFactory) throws BeansException {
+ this.beanFactory = (DefaultListableBeanFactory) beanFactory;
+ }
+
+ public void load() {
+ if (uwfAdapter.getLoaderClass() != null) {
+ final WorkflowInstanceLoader wfLoader = (WorkflowInstanceLoader) beanFactory.createBean(
+ uwfAdapter.getLoaderClass(), AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+ wfLoader.load();
+ }
+ if (rwfAdapter.getLoaderClass() != null) {
+ final WorkflowInstanceLoader wfLoader = (WorkflowInstanceLoader) beanFactory.createBean(
+ rwfAdapter.getLoaderClass(), AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+ wfLoader.load();
+ }
+ }
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/init/WorkflowAdapterLoader.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,222 @@
+/*
+ * 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.core.persistence.dao.impl;
+
+import java.io.Closeable;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.syncope.core.persistence.beans.SyncopeConf;
+import org.apache.syncope.core.util.ImportExport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Initialize Database with default content if no data is present already
+ */
+@Component
+public class ContentLoader {
+ private static final String VIEWS_FILE = "/views.xml";
+ private static final String INDEXES_FILE = "/indexes.xml";
+ private static final String CONTENT_FILE = "/content.xml";
+
+ /**
+ * Logger.
+ */
+ private static final Logger LOG = LoggerFactory.getLogger(ContentLoader.class);
+
+ @Autowired
+ private DataSource dataSource;
+
+ @Autowired
+ private ImportExport importExport;
+
+ @Transactional
+ public void load(boolean activitiEnabledForUsers) {
+ Connection conn = DataSourceUtils.getConnection(dataSource);
+
+ boolean existingData = isDataPresent(conn);
+ if (existingData) {
+ LOG.info("Data found in the database, leaving untouched");
+ closeConnection(conn);
+ return;
+ }
+
+ LOG.info("Empty database found, loading default content");
+
+ createViews(conn);
+ createIndexes(conn);
+ if (activitiEnabledForUsers) {
+ deleteActivitiProperties(conn);
+ }
+ closeConnection(conn);
+ loadDefaultContent();
+ }
+
+ private boolean isDataPresent(Connection conn) {
+ ResultSet resultSet = null;
+ PreparedStatement statement = null;
+ try {
+ final String queryContent = "SELECT * FROM " + SyncopeConf.class.getSimpleName();
+ statement = conn.prepareStatement(
+ queryContent, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ resultSet = statement.executeQuery();
+ resultSet.last();
+ return resultSet.getRow() > 0;
+ } catch (SQLException e) {
+ LOG.error("Could not access to table " + SyncopeConf.class.getSimpleName(), e);
+ return true;
+ } finally {
+ closeResultSet(resultSet);
+ closeStatement(statement);
+ }
+ }
+
+ private void createViews(Connection conn) {
+ LOG.debug("Creating views");
+ try {
+ InputStream viewsStream = getClass().getResourceAsStream(VIEWS_FILE);
+ Properties views = new Properties();
+ views.loadFromXML(viewsStream);
+ close(viewsStream);
+
+ for (String idx : views.stringPropertyNames()) {
+ LOG.debug("Creating view {}", views.get(idx).toString());
+ PreparedStatement statement = null;
+ try {
+ final String updateViews = views.get(idx).toString().replaceAll("\\n", " ");
+ statement = conn.prepareStatement(updateViews);
+ statement.executeUpdate();
+ } catch (SQLException e) {
+ LOG.error("Could not create view ", e);
+ } finally {
+ if (statement != null) {
+ statement.close();
+ }
+ }
+ }
+
+ LOG.debug("Views created, go for indexes");
+ } catch (Exception e) {
+ LOG.error("While creating views", e);
+ }
+ }
+
+ private void createIndexes(Connection conn) {
+ LOG.debug("Creating indexes");
+
+ InputStream indexesStream = getClass().getResourceAsStream(INDEXES_FILE);
+ Properties indexes = new Properties();
+ try {
+ indexes.loadFromXML(indexesStream);
+ } catch (Exception e) {
+ throw new RuntimeException("Error loading properties from stream", e);
+ }
+ close(indexesStream);
+
+ for (String idx : indexes.stringPropertyNames()) {
+ LOG.debug("Creating index {}", indexes.get(idx).toString());
+ PreparedStatement statement = null;
+ try {
+ final String updateIndexed = indexes.get(idx).toString();
+ statement = conn.prepareStatement(updateIndexed);
+ statement.executeUpdate();
+ } catch (SQLException e) {
+ LOG.error("Could not create index ", e);
+ } finally {
+ closeStatement(statement);
+ }
+ }
+ }
+
+ private void deleteActivitiProperties(Connection conn) {
+ PreparedStatement statement = null;
+ try {
+ statement = conn.prepareStatement("DELETE FROM ACT_GE_PROPERTY");
+ statement.executeUpdate();
+ } catch (SQLException e) {
+ LOG.error("Error during ACT_GE_PROPERTY delete rows", e);
+ } finally {
+ closeStatement(statement);
+ }
+ }
+
+ private void loadDefaultContent() {
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ try {
+ SAXParser parser = factory.newSAXParser();
+ parser.parse(getClass().getResourceAsStream(CONTENT_FILE), importExport);
+ LOG.debug("Default content successfully loaded");
+ } catch (Exception e) {
+ LOG.error("While loading default content", e);
+ }
+ }
+
+ private void closeResultSet(ResultSet resultSet) {
+ try {
+ if (resultSet != null) {
+ resultSet.close();
+ }
+ } catch (SQLException e) {
+ LOG.error("While closing SQL result set", e);
+ }
+ }
+
+ private void closeStatement(PreparedStatement statement) {
+ if (statement != null) {
+ try {
+ statement.close();
+ } catch (SQLException e) {
+ LOG.error("Error closing SQL statement", e);
+ }
+ }
+ }
+
+ private void closeConnection(Connection conn) {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ LOG.error("Error closing SQL connection", e);
+ } finally {
+ DataSourceUtils.releaseConnection(conn, dataSource);
+ }
+ }
+
+ private void close(Closeable closeable) {
+ if (closeable != null) {
+ try {
+ closeable.close();
+ } catch (Throwable t) {
+ LOG.error("Error closing closeable", t);
+ }
+ }
+ }
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/ContentLoader.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,101 @@
+/*
+ * 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.core.policy;
+
+import java.util.regex.Pattern;
+
+import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.types.AccountPolicySpec;
+import org.apache.syncope.types.PolicyType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AccountPolicyEnforcer extends PolicyEnforcer<AccountPolicySpec, SyncopeUser> {
+
+ private static final Pattern PATTERN = Pattern.compile("[a-zA-Z0-9-_@. ]+");
+
+ private static final Pattern LCPATTERN = Pattern.compile("[a-z0-9-_@. ]+");
+
+ private static final Pattern UCPATTERN = Pattern.compile("[A-Z0-9-_@. ]+");
+
+ @Autowired(required=false)
+ UserSuspender userSuspender;
+
+ /* (non-Javadoc)
+ * @see AccountPolicyEnforcer#enforce(AccountPolicySpec, PolicyType, SyncopeUser)
+ */
+ @Override
+ public void enforce(final AccountPolicySpec policy, final PolicyType type, final SyncopeUser user)
+ throws AccountPolicyException, PolicyEnforceException {
+
+ if (user.getUsername() == null) {
+ throw new PolicyEnforceException("Invalid account");
+ }
+
+ if (policy == null) {
+ throw new PolicyEnforceException("Invalid policy");
+ }
+
+ // check min length
+ if (policy.getMinLength() > 0 && policy.getMinLength() > user.getUsername().length()) {
+ throw new AccountPolicyException("Username too short");
+ }
+
+ // check max length
+ if (policy.getMaxLength() > 0 && policy.getMaxLength() < user.getUsername().length()) {
+ throw new AccountPolicyException("Username too long");
+ }
+
+ // check words not permitted
+ for (String word : policy.getWordsNotPermitted()) {
+ if (user.getUsername().contains(word)) {
+ throw new AccountPolicyException("Used word(s) not permitted");
+ }
+ }
+
+ // check syntax
+ if ((policy.isAllLowerCase() && !LCPATTERN.matcher(user.getUsername()).matches())
+ || (policy.isAllUpperCase() && !UCPATTERN.matcher(user.getUsername()).matches())
+ || !PATTERN.matcher(user.getUsername()).matches()) {
+ throw new AccountPolicyException("Invalid username syntax");
+ }
+
+ // check prefix
+ for (String prefix : policy.getPrefixesNotPermitted()) {
+ if (user.getUsername().startsWith(prefix)) {
+ throw new AccountPolicyException("Prefix not permitted");
+ }
+ }
+
+ // check suffix
+ for (String suffix : policy.getSuffixesNotPermitted()) {
+ if (user.getUsername().endsWith(suffix)) {
+ throw new AccountPolicyException("Suffix not permitted");
+ }
+ }
+
+ // check for subsequent failed logins
+ if (user.getFailedLogins() != null && policy.getPermittedLoginRetries() > 0
+ && user.getFailedLogins() > policy.getPermittedLoginRetries() && !user.getSuspended()) {
+ userSuspender.suspend(policy, user);
+ }
+ }
+
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/AccountPolicyEnforcer.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,196 @@
+/*
+ * 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.core.policy;
+
+import org.apache.syncope.types.PasswordPolicySpec;
+import org.apache.syncope.types.PolicyType;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PasswordPolicyEnforcer extends PolicyEnforcer<PasswordPolicySpec, String> {
+
+ /* (non-Javadoc)
+ * @see org.apache.syncope.core.policy.PasswordPolicyEnforcer#enforce(org.apache.syncope.types.PasswordPolicySpec, org.apache.syncope.types.PolicyType, java.lang.String)
+ */
+ @Override
+ public void enforce(final PasswordPolicySpec policy, final PolicyType type, final String password)
+ throws PasswordPolicyException, PolicyEnforceException {
+
+ if (password == null) {
+ throw new PolicyEnforceException("Invalid password");
+ }
+
+ if (policy == null) {
+ throw new PolicyEnforceException("Invalid policy");
+ }
+
+ // check length
+ if (policy.getMinLength() > 0 && policy.getMinLength() > password.length()) {
+ throw new PasswordPolicyException("Password too short");
+ }
+
+ if (policy.getMaxLength() > 0 && policy.getMaxLength() < password.length()) {
+ throw new PasswordPolicyException("Password too long");
+ }
+
+ // check words not permitted
+ for (String word : policy.getWordsNotPermitted()) {
+ if (password.contains(word)) {
+ throw new PasswordPolicyException("Used word(s) not permitted");
+ }
+ }
+
+ // check digits occurrence
+ if (policy.isDigitRequired() && !checkForDigit(password)) {
+ throw new PasswordPolicyException("Password must contain digit(s)");
+ }
+
+ // check lowercase alphabetic characters occurrence
+ if (policy.isLowercaseRequired() && !checkForLowercase(password)) {
+ throw new PasswordPolicyException("Password must contain lowercase alphabetic character(s)");
+ }
+
+ // check uppercase alphabetic characters occurrence
+ if (policy.isUppercaseRequired() && !checkForUppercase(password)) {
+ throw new PasswordPolicyException("Password must contain uppercase alphabetic character(s)");
+ }
+
+ // check prefix
+ for (String prefix : policy.getPrefixesNotPermitted()) {
+ if (password.startsWith(prefix)) {
+ throw new PasswordPolicyException("Prefix not permitted");
+ }
+ }
+
+ // check suffix
+ for (String suffix : policy.getSuffixesNotPermitted()) {
+ if (password.endsWith(suffix)) {
+ throw new PasswordPolicyException("Suffix not permitted");
+ }
+ }
+
+ // check digit first occurrence
+ if (policy.isMustStartWithDigit() && !checkForFirstDigit(password)) {
+ throw new PasswordPolicyException("Password must start with a digit");
+ }
+
+ if (policy.isMustntStartWithDigit() && checkForFirstDigit(password)) {
+ throw new PasswordPolicyException("Password mustn't start with a digit");
+ }
+
+ // check digit last occurrence
+ if (policy.isMustEndWithDigit() && !checkForLastDigit(password)) {
+ throw new PasswordPolicyException("Password must end with a digit");
+ }
+
+ if (policy.isMustntEndWithDigit() && checkForLastDigit(password)) {
+ throw new PasswordPolicyException("Password mustn't end with a digit");
+ }
+
+ // check alphanumeric characters occurence
+ if (policy.isAlphanumericRequired() && !checkForAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must contain alphanumeric character(s)");
+ }
+
+ // check non alphanumeric characters occurence
+ if (policy.isNonAlphanumericRequired() && !checkForNonAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must contain non-alphanumeric character(s)");
+ }
+
+ // check alphanumeric character first occurrence
+ if (policy.isMustStartWithAlpha() && !checkForFirstAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must start with an alphanumeric character");
+ }
+
+ if (policy.isMustntStartWithAlpha() && checkForFirstAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password mustn't start with an alphanumeric character");
+ }
+
+ // check alphanumeric character last occurrence
+ if (policy.isMustEndWithAlpha() && !checkForLastAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must end with an alphanumeric character");
+ }
+
+ if (policy.isMustntEndWithAlpha() && checkForLastAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password mustn't end with an alphanumeric character");
+ }
+
+ // check non alphanumeric character first occurrence
+ if (policy.isMustStartWithNonAlpha() && !checkForFirstNonAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must start with a non-alphanumeric character");
+ }
+
+ if (policy.isMustntStartWithNonAlpha() && checkForFirstNonAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password mustn't start with a non-alphanumeric character");
+ }
+
+ // check non alphanumeric character last occurrence
+ if (policy.isMustEndWithNonAlpha() && !checkForLastNonAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password must end with a non-alphanumeric character");
+ }
+
+ if (policy.isMustntEndWithNonAlpha() && checkForLastNonAlphanumeric(password)) {
+ throw new PasswordPolicyException("Password mustn't end with a non-alphanumeric character");
+ }
+ }
+
+ private boolean checkForDigit(final String str) {
+ return PolicyPattern.DIGIT.matcher(str).matches();
+ }
+
+ private boolean checkForLowercase(final String str) {
+ return PolicyPattern.ALPHA_LOWERCASE.matcher(str).matches();
+ }
+
+ private boolean checkForUppercase(final String str) {
+ return PolicyPattern.ALPHA_UPPERCASE.matcher(str).matches();
+ }
+
+ private boolean checkForFirstDigit(final String str) {
+ return PolicyPattern.FIRST_DIGIT.matcher(str).matches();
+ }
+
+ private boolean checkForLastDigit(final String str) {
+ return PolicyPattern.LAST_DIGIT.matcher(str).matches();
+ }
+
+ private boolean checkForAlphanumeric(final String str) {
+ return PolicyPattern.ALPHANUMERIC.matcher(str).matches();
+ }
+
+ private boolean checkForFirstAlphanumeric(final String str) {
+ return PolicyPattern.FIRST_ALPHANUMERIC.matcher(str).matches();
+ }
+
+ private boolean checkForLastAlphanumeric(final String str) {
+ return PolicyPattern.LAST_ALPHANUMERIC.matcher(str).matches();
+ }
+
+ private boolean checkForNonAlphanumeric(final String str) {
+ return PolicyPattern.NON_ALPHANUMERIC.matcher(str).matches();
+ }
+
+ private boolean checkForFirstNonAlphanumeric(final String str) {
+ return PolicyPattern.FIRST_NON_ALPHANUMERIC.matcher(str).matches();
+ }
+
+ private boolean checkForLastNonAlphanumeric(final String str) {
+ return PolicyPattern.LAST_NON_ALPHANUMERIC.matcher(str).matches();
+ }
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/PasswordPolicyEnforcer.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,26 @@
+/*
+ * 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.core.policy;
+
+import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.types.AccountPolicySpec;
+
+public interface UserSuspender {
+ void suspend(final AccountPolicySpec policy, final SyncopeUser user);
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/policy/UserSuspender.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,84 @@
+/*
+ * 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.core.workflow;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.syncope.core.persistence.dao.impl.ContentLoader;
+import org.apache.syncope.core.workflow.user.activiti.ActivitiUserWorkflowAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ActivitiDetector {
+ private static final Logger LOG = LoggerFactory.getLogger(ActivitiDetector.class);
+ private static String uwfAdapterClassName;
+ private static String rwfAdapterClassName;
+
+ static {
+ try {
+ initWFAdapterClassNames();
+ } catch (IOException e) {
+ LOG.error("Could not init uwfAdapterClassName", e);
+ }
+ }
+
+ /**
+ * Read classpath:/workflow.properties in order to determine the configured workflow adapter class name.
+ *
+ * @throws IOException if anything goes wrong
+ */
+ private static void initWFAdapterClassNames() throws IOException {
+ Properties props = new java.util.Properties();
+ InputStream propStream = null;
+ try {
+ propStream = ContentLoader.class.getResourceAsStream("/workflow.properties");
+ props.load(propStream);
+ uwfAdapterClassName = props.getProperty("uwfAdapter");
+ rwfAdapterClassName = props.getProperty("rwfAdapter");
+ } catch (Exception e) {
+ LOG.error("Could not load workflow.properties", e);
+ } finally {
+ if (propStream != null) {
+ propStream.close();
+ }
+ }
+ }
+
+ /**
+ * Check if the configured user workflow adapter is Activiti's.
+ *
+ * @return whether Activiti is configured for user workflow or not
+ */
+ public static boolean isActivitiEnabledForUsers() {
+ return uwfAdapterClassName != null && uwfAdapterClassName.equals(ActivitiUserWorkflowAdapter.class.getName());
+ }
+
+ /**
+ * Check if the configured role workflow adapter is Activiti's.
+ *
+ * @return whether Activiti is configured for role workflow or not
+ */
+ public static boolean isActivitiEnabledForRoles() {
+ // ActivitiRoleWorkflowAdapter hasn't been developed (yet) as part of SYNCOPE-173
+ //return rwfAdapterClassName != null && rwfAdapterClassName.equals(ActivitiRoleWorkflowAdapter.class.getName());
+ return false;
+ }
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/ActivitiDetector.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowAdapter.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowAdapter.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowAdapter.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowAdapter.java Mon Jan 14 18:21:24 2013
@@ -33,7 +33,7 @@ public interface WorkflowAdapter {
* @return null if no init is needed or the WorkflowLoader class for handling initialization
* @see org.apache.syncope.core.init.SpringContextInitializer
*/
- Class<? extends WorkflowLoader> getLoaderClass();
+ Class<? extends WorkflowInstanceLoader> getLoaderClass();
/**
* Get workflow definition.
Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowInstanceLoader.java (from r1432115, syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowLoader.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowInstanceLoader.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowInstanceLoader.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowLoader.java&r1=1432115&r2=1433021&rev=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowLoader.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowInstanceLoader.java Mon Jan 14 18:21:24 2013
@@ -18,7 +18,7 @@
*/
package org.apache.syncope.core.workflow;
-public interface WorkflowLoader {
+public interface WorkflowInstanceLoader {
void load();
}
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java (added)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,84 @@
+/*
+ * 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.core.workflow;
+
+import java.util.List;
+import java.util.Map;
+import java.util.AbstractMap.SimpleEntry;
+
+import org.apache.syncope.client.to.UserTO;
+import org.apache.syncope.core.persistence.beans.PropagationTask;
+import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.core.policy.UserSuspender;
+import org.apache.syncope.core.propagation.PropagationManager;
+import org.apache.syncope.core.propagation.PropagationTaskExecutor;
+import org.apache.syncope.core.rest.data.UserDataBinder;
+import org.apache.syncope.core.workflow.user.UserWorkflowAdapter;
+import org.apache.syncope.types.AccountPolicySpec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WorkflowUserSuspender implements UserSuspender {
+ private static final Logger LOG = LoggerFactory.getLogger(WorkflowUserSuspender.class);
+
+ @Autowired
+ private UserWorkflowAdapter uwfAdapter;
+
+ @Autowired
+ private PropagationManager propagationManager;
+
+ @Autowired
+ private PropagationTaskExecutor taskExecutor;
+
+ @Autowired
+ private UserDataBinder userDataBinder;
+
+ @Override
+ public void suspend(AccountPolicySpec policy, SyncopeUser user) {
+ try {
+ LOG.debug("User {}:{} is over to max failed logins", user.getId(), user.getUsername());
+
+ // reduce failed logins number to avoid multiple request
+ user.setFailedLogins(user.getFailedLogins() - 1);
+
+ // disable user
+ final WorkflowResult<Long> updated = uwfAdapter.suspend(user);
+
+ // propagate suspension if and only if it is required by policy
+ if (policy.isPropagateSuspension()) {
+ final List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(
+ new WorkflowResult<Map.Entry<Long, Boolean>>(
+ new SimpleEntry<Long, Boolean>(updated.getResult(), Boolean.FALSE),
+ updated.getPropByRes(), updated.getPerformedTasks()));
+
+ taskExecutor.execute(tasks);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ final UserTO savedTO = userDataBinder.getUserTO(updated.getResult());
+ LOG.debug("About to return suspended user\n{}", savedTO);
+ }
+ } catch (Exception e) {
+ LOG.error("Error during user suspension", e);
+ } }
+
+}
Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowUserSuspender.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/role/AbstractRoleWorkflowAdapter.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/role/AbstractRoleWorkflowAdapter.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/role/AbstractRoleWorkflowAdapter.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/role/AbstractRoleWorkflowAdapter.java Mon Jan 14 18:21:24 2013
@@ -25,7 +25,7 @@ import org.apache.syncope.core.rest.cont
import org.apache.syncope.core.rest.data.RoleDataBinder;
import org.apache.syncope.core.util.NotFoundException;
import org.apache.syncope.core.workflow.WorkflowException;
-import org.apache.syncope.core.workflow.WorkflowLoader;
+import org.apache.syncope.core.workflow.WorkflowInstanceLoader;
import org.apache.syncope.core.workflow.WorkflowResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -40,7 +40,7 @@ public abstract class AbstractRoleWorkfl
protected RoleDAO roleDAO;
@Override
- public Class<? extends WorkflowLoader> getLoaderClass() {
+ public Class<? extends WorkflowInstanceLoader> getLoaderClass() {
return null;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/AbstractUserWorkflowAdapter.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/AbstractUserWorkflowAdapter.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/AbstractUserWorkflowAdapter.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/AbstractUserWorkflowAdapter.java Mon Jan 14 18:21:24 2013
@@ -28,7 +28,7 @@ import org.apache.syncope.core.rest.cont
import org.apache.syncope.core.rest.data.UserDataBinder;
import org.apache.syncope.core.util.NotFoundException;
import org.apache.syncope.core.workflow.WorkflowException;
-import org.apache.syncope.core.workflow.WorkflowLoader;
+import org.apache.syncope.core.workflow.WorkflowInstanceLoader;
import org.apache.syncope.core.workflow.WorkflowResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -43,7 +43,7 @@ public abstract class AbstractUserWorkfl
protected UserDAO userDAO;
@Override
- public Class<? extends WorkflowLoader> getLoaderClass() {
+ public Class<? extends WorkflowInstanceLoader> getLoaderClass() {
return null;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java Mon Jan 14 18:21:24 2013
@@ -64,7 +64,7 @@ import org.apache.syncope.core.propagati
import org.apache.syncope.core.rest.controller.UnauthorizedRoleException;
import org.apache.syncope.core.util.NotFoundException;
import org.apache.syncope.core.workflow.WorkflowException;
-import org.apache.syncope.core.workflow.WorkflowLoader;
+import org.apache.syncope.core.workflow.WorkflowInstanceLoader;
import org.apache.syncope.core.workflow.WorkflowResult;
import org.apache.syncope.core.workflow.user.AbstractUserWorkflowAdapter;
import org.apache.syncope.types.ResourceOperation;
@@ -136,7 +136,7 @@ public class ActivitiUserWorkflowAdapter
private RepositoryService repositoryService;
@Override
- public Class<? extends WorkflowLoader> getLoaderClass() {
+ public Class<? extends WorkflowInstanceLoader> getLoaderClass() {
return ActivitiWorkflowLoader.class;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiWorkflowLoader.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiWorkflowLoader.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiWorkflowLoader.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiWorkflowLoader.java Mon Jan 14 18:21:24 2013
@@ -23,12 +23,12 @@ import java.io.InputStream;
import java.util.List;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
-import org.apache.syncope.core.workflow.WorkflowLoader;
+import org.apache.syncope.core.workflow.WorkflowInstanceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-public class ActivitiWorkflowLoader implements WorkflowLoader {
+public class ActivitiWorkflowLoader implements WorkflowInstanceLoader {
private static final Logger LOG = LoggerFactory.getLogger(ActivitiWorkflowLoader.class);
Modified: syncope/trunk/core/src/main/resources/persistenceContext.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/persistenceContext.xml?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/persistenceContext.xml (original)
+++ syncope/trunk/core/src/main/resources/persistenceContext.xml Mon Jan 14 18:21:24 2013
@@ -36,9 +36,8 @@ under the License.
<context:annotation-config/>
<context:component-scan base-package="org.apache.syncope.core.persistence"/>
- <context:component-scan base-package="org.apache.syncope.core.rest.data"/>
+ <context:component-scan base-package="org.apache.syncope.core.util"/>
<context:component-scan base-package="org.apache.syncope.core.policy"/>
- <context:component-scan base-package="org.apache.syncope.core.policy.impl"/>
<aop:aspectj-autoproxy/>
Modified: syncope/trunk/core/src/main/resources/syncopeContext.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/syncopeContext.xml?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/syncopeContext.xml (original)
+++ syncope/trunk/core/src/main/resources/syncopeContext.xml Mon Jan 14 18:21:24 2013
@@ -41,8 +41,9 @@ under the License.
<context:component-scan base-package="org.apache.syncope.core.init"/>
<context:component-scan base-package="org.apache.syncope.core.audit"/>
- <context:component-scan base-package="org.apache.syncope.core.util"/>
<context:component-scan base-package="org.apache.syncope.core.connid"/>
+ <context:component-scan base-package="org.apache.syncope.core.rest.data"/>
+ <context:component-scan base-package="org.apache.syncope.core.workflow"/>
<bean id="nonJPAdbInitializer" class="org.springframework.jdbc.datasource.init.DataSourceInitializer">
<property name="dataSource" ref="dataSource"/>
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java Mon Jan 14 18:21:24 2013
@@ -22,8 +22,9 @@ import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
+
+import org.apache.syncope.core.AbstractTest;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
-import org.apache.syncope.core.persistence.dao.AbstractDAOTest;
import org.apache.syncope.core.persistence.dao.UserDAO;
import org.apache.syncope.core.policy.PolicyPattern;
import org.apache.syncope.core.util.IncompatiblePolicyException;
@@ -34,7 +35,7 @@ import org.springframework.beans.factory
import org.springframework.transaction.annotation.Transactional;
@Transactional
-public class PasswordGeneratorTest extends AbstractDAOTest {
+public class PasswordGeneratorTest extends AbstractTest {
@Autowired
private PasswordGenerator passwordGenerator;
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AbstractDAOTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AbstractDAOTest.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AbstractDAOTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AbstractDAOTest.java Mon Jan 14 18:21:24 2013
@@ -31,8 +31,7 @@ import org.springframework.test.context.
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {"classpath:syncopeContext.xml", "classpath:persistenceContext.xml",
- "classpath:schedulingContext.xml", "classpath:workflowContext.xml"})
+@ContextConfiguration(locations = {"classpath:persistenceTestEnv.xml"})
public abstract class AbstractDAOTest {
/**
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java Mon Jan 14 18:21:24 2013
@@ -41,8 +41,7 @@ import org.apache.syncope.core.util.Enti
import org.apache.syncope.types.AttributableType;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {"classpath:syncopeContext.xml", "classpath:persistenceContext.xml",
- "classpath:schedulingContext.xml", "classpath:workflowContext.xml"})
+@ContextConfiguration(locations = {"classpath:persistenceTestEnv.xml"})
@Transactional
public class AttributableSearchTest {
Added: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java (added)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,35 @@
+/*
+ * 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.core.persistence.dao;
+
+import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.util.NotFoundException;
+
+public class DummyConnectorRegistry implements ConnectorRegistry {
+
+ @Override
+ public void registerConnector(ExternalResource resource)
+ throws NotFoundException {
+ }
+
+ @Override
+ public void unregisterConnector(String id) {
+ }
+
+}
Propchange: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/DummyConnectorRegistry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java (added)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java Mon Jan 14 18:21:24 2013
@@ -0,0 +1,46 @@
+/*
+ * 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.core.persistence.dao;
+
+import javax.servlet.ServletContext;
+
+import org.apache.syncope.core.persistence.dao.impl.ContentLoader;
+import org.apache.syncope.core.workflow.ActivitiDetector;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.ServletContextAware;
+
+/**
+ * Take care of all initializations needed by Syncope to run up and safe.
+ */
+@Component
+public class TestDbInitializer implements ServletContextAware, InitializingBean {
+ @Autowired
+ private ContentLoader contentLoader;
+
+ @Override
+ public void setServletContext(final ServletContext servletContext) {
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ contentLoader.load(ActivitiDetector.isActivitiEnabledForUsers());
+ }
+}
\ No newline at end of file
Propchange: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TestDbInitializer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Mon Jan 14 18:21:24 2013
@@ -42,9 +42,9 @@ import org.apache.syncope.client.to.Sync
import org.apache.syncope.client.to.TaskExecTO;
import org.apache.syncope.client.to.TaskTO;
import org.apache.syncope.client.to.UserTO;
-import org.apache.syncope.core.init.SpringContextInitializer;
import org.apache.syncope.core.sync.SyncJob;
import org.apache.syncope.core.sync.TestSyncActions;
+import org.apache.syncope.core.workflow.ActivitiDetector;
import org.apache.syncope.types.IntMappingType;
import org.apache.syncope.types.PropagationTaskExecStatus;
import org.apache.syncope.types.TraceLevel;
@@ -267,7 +267,7 @@ public class TaskTestITCase extends Abst
userTO = userService.read(userTO.getId());
assertNotNull(userTO);
assertEquals("test9", userTO.getUsername());
- assertEquals(SpringContextInitializer.isActivitiEnabledForUsers()
+ assertEquals(ActivitiDetector.isActivitiEnabledForUsers()
? "active"
: "created", userTO.getStatus());
assertEquals("test9@syncope.apache.org", userTO.getAttributeMap().get("email").getValues().get(0));
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java Mon Jan 14 18:21:24 2013
@@ -44,8 +44,8 @@ import org.apache.syncope.client.to.Work
import org.apache.syncope.client.util.AttributableOperations;
import org.apache.syncope.client.validation.SyncopeClientCompositeErrorException;
import org.apache.syncope.client.validation.SyncopeClientException;
-import org.apache.syncope.core.init.SpringContextInitializer;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
+import org.apache.syncope.core.workflow.ActivitiDetector;
import org.apache.syncope.types.AttributableType;
import org.apache.syncope.types.CipherAlgorithm;
import org.apache.syncope.types.PropagationTaskExecStatus;
@@ -562,7 +562,7 @@ public class UserTestITCase extends Abst
@Test
public void createWithReject() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForUsers());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers());
UserTO userTO = getSampleTO("createWithReject@syncope.apache.org");
@@ -619,7 +619,7 @@ public class UserTestITCase extends Abst
@Test
public void createWithApproval() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForUsers());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers());
JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
@@ -1053,7 +1053,7 @@ public class UserTestITCase extends Abst
@Test
public void createActivate() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForUsers());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers());
UserTO userTO = getSampleTO("createActivate@syncope.apache.org");
@@ -1080,7 +1080,7 @@ public class UserTestITCase extends Abst
@Test
public void createActivateByUsername() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForUsers());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers());
UserTO userTO = getSampleTO("createActivateByUsername@syncope.apache.org");
@@ -1117,7 +1117,7 @@ public class UserTestITCase extends Abst
userTO = userService.create(userTO);
assertNotNull(userTO);
- assertEquals(SpringContextInitializer.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
+ assertEquals(ActivitiDetector.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
userTO = userService.suspend(userTO.getId());
@@ -1141,7 +1141,7 @@ public class UserTestITCase extends Abst
userTO = userService.create(userTO);
assertNotNull(userTO);
- assertEquals(SpringContextInitializer.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
+ assertEquals(ActivitiDetector.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
userTO = userService.suspendByUsername(userTO.getUsername());
@@ -1174,7 +1174,7 @@ public class UserTestITCase extends Abst
userTO = userService.create(userTO);
assertNotNull(userTO);
- assertEquals(SpringContextInitializer.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
+ assertEquals(ActivitiDetector.isActivitiEnabledForUsers() ? "active" : "created", userTO.getStatus());
String query = "?resourceNames=" + dbTable.getName() + "&resourceNames=" + ldap.getName()
+ "&performLocally=true"; // check also performLocally
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/WorkflowTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/WorkflowTestITCase.java?rev=1433021&r1=1433020&r2=1433021&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/WorkflowTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/WorkflowTestITCase.java Mon Jan 14 18:21:24 2013
@@ -22,7 +22,7 @@ import static org.junit.Assert.*;
import java.util.List;
import org.apache.syncope.client.to.WorkflowDefinitionTO;
-import org.apache.syncope.core.init.SpringContextInitializer;
+import org.apache.syncope.core.workflow.ActivitiDetector;
import org.junit.Assume;
import org.junit.Test;
@@ -46,7 +46,7 @@ public class WorkflowTestITCase extends
@Test//TODO TestCase needs to be extended
public void testUpdateUserDefinition() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForUsers());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers());
WorkflowDefinitionTO definition = workflowService.getDefinition(USER_TYPE);
assertNotNull(definition);
@@ -58,7 +58,7 @@ public class WorkflowTestITCase extends
@Test//TODO TestCase needs to be extended
public void testUpdateRoleDefinition() {
- Assume.assumeTrue(SpringContextInitializer.isActivitiEnabledForRoles());
+ Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForRoles());
WorkflowDefinitionTO definition = workflowService.getDefinition(ROLE_TYPE);
assertNotNull(definition);
Added: syncope/trunk/core/src/test/resources/persistenceTestEnv.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/persistenceTestEnv.xml?rev=1433021&view=auto
==============================================================================
--- syncope/trunk/core/src/test/resources/persistenceTestEnv.xml (added)
+++ syncope/trunk/core/src/test/resources/persistenceTestEnv.xml Mon Jan 14 18:21:24 2013
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+
+<!-- This should not end in *Context as it would then be picked up in the cargo start -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/tx
+ http://www.springframework.org/schema/tx/spring-tx.xsd
+ http://www.springframework.org/schema/aop
+ http://www.springframework.org/schema/aop/spring-aop.xsd">
+
+ <bean class="org.apache.syncope.core.persistence.dao.TestDbInitializer"/>
+ <bean class="org.apache.syncope.core.persistence.dao.DummyConnectorRegistry">
+ </bean>
+ <bean class="org.apache.syncope.core.persistence.dao.impl.ContentLoader">
+ </bean>
+
+ <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+ <property name="locations">
+ <list>
+ <value>classpath:persistence.properties</value>
+ <value>classpath:security.properties</value>
+ <value>classpath:workflow.properties</value>
+ </list>
+ </property>
+ <property name="ignoreResourceNotFound" value="true" />
+ <property name="ignoreUnresolvablePlaceholders" value="true" />
+ </bean>
+
+ <bean id="nonJPAdbInitializer"
+ class="org.springframework.jdbc.datasource.init.DataSourceInitializer">
+ <property name="dataSource" ref="dataSource" />
+ <property name="enabled" value="true" />
+ <property name="databasePopulator">
+ <bean
+ class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
+ <property name="continueOnError" value="true" />
+ <property name="ignoreFailedDrops" value="true" />
+ <property name="sqlScriptEncoding" value="UTF-8" />
+ <property name="scripts">
+ <array>
+ <value type="org.springframework.core.io.Resource">
+ classpath:/quartz/${quartz.sql}
+ </value>
+ <value type="org.springframework.core.io.Resource">
+ classpath:/logback/${logback.sql}
+ </value>
+ </array>
+ </property>
+ </bean>
+ </property>
+ </bean>
+
+ <bean id="jexlEngine" class="org.apache.commons.jexl2.JexlEngine">
+ <property name="cache" value="512" />
+ <property name="lenient" value="true" />
+ <property name="silent" value="false" />
+ </bean>
+ <bean id="jexlUtil" class="org.apache.syncope.core.util.JexlUtil" />
+
+ <import resource="persistenceContext.xml" />
+</beans>
Propchange: syncope/trunk/core/src/test/resources/persistenceTestEnv.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain