diff --git a/ch.eitchnet.utils b/ch.eitchnet.utils index fe1216eb1..a67df72f3 160000 --- a/ch.eitchnet.utils +++ b/ch.eitchnet.utils @@ -1 +1 @@ -Subproject commit fe1216eb12b41d052cb69d53a582992afa831c51 +Subproject commit a67df72f3f9b795796896889c2dbe1cf8561ccd2 diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java index a2605efd7..0ae5554cd 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java @@ -135,8 +135,6 @@ public class ComponentContainerImpl implements ComponentContainer { componentMap.put(apiClass, strolchComponent); controllerMap.put(componentName, new ComponentController(strolchComponent)); - String msg = "Initialized component {0} with API {1} and impl {2}."; //$NON-NLS-1$ - logger.info(MessageFormat.format(msg, componentName, api, impl)); } catch (NoSuchMethodException e) { diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java index 45eaa8ef5..c312f7d35 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java @@ -153,7 +153,8 @@ public class ComponentDependencyAnalyzer { } String inset = StringHelper.normalizeLength(" ", depth * 2, false, ' '); //$NON-NLS-1$ for (ComponentController controller : components) { - logger.info(inset + controller.getComponent().getName()); + logger.info(inset + controller.getComponent().getName() + ": " + + controller.getComponent().getClass().getName()); logDependencies(depth + 1, controller.getDownstreamDependencies()); } } diff --git a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java index 35e8f3733..5b73c4d35 100644 --- a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java +++ b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java @@ -516,13 +516,16 @@ public abstract class AbstractTransaction implements StrolchTransaction { sb.append(StringHelper.formatNanoDuration(txDuration)); sb.append(", close="); //$NON-NLS-1$ sb.append(StringHelper.formatNanoDuration(closeDuration)); + if (isAuditTrailEnabled()) { sb.append(", auditTrail="); //$NON-NLS-1$ sb.append(StringHelper.formatNanoDuration(auditTrailDuration)); } - if (observerUpdateDuration > 0L) + + if (isObserverUpdatesEnabled()) { sb.append(", updates="); //$NON-NLS-1$ - sb.append(StringHelper.formatNanoDuration(observerUpdateDuration)); + sb.append(StringHelper.formatNanoDuration(observerUpdateDuration)); + } logger.info(sb.toString()); } diff --git a/li.strolch.agent/src/main/java/li/strolch/runtime/configuration/ConfigurationSaxParser.java b/li.strolch.agent/src/main/java/li/strolch/runtime/configuration/ConfigurationSaxParser.java index f64d6e659..134d71465 100644 --- a/li.strolch.agent/src/main/java/li/strolch/runtime/configuration/ConfigurationSaxParser.java +++ b/li.strolch.agent/src/main/java/li/strolch/runtime/configuration/ConfigurationSaxParser.java @@ -452,6 +452,10 @@ public class ConfigurationSaxParser extends DefaultHandler { if (thisComponentBuilder == null) { this.componentBuilders.add(otherComponentBuilder); } else { + if (StringHelper.isNotEmpty(otherComponentBuilder.getImpl())) { + thisComponentBuilder.setImpl(otherComponentBuilder.getImpl()); + thisComponentBuilder.setDependencies(otherComponentBuilder.getDependencies()); + } thisComponentBuilder.getProperties().putAll(otherComponentBuilder.getProperties()); } } @@ -552,6 +556,10 @@ public class ConfigurationSaxParser extends DefaultHandler { return this.dependencies; } + public void setDependencies(Set dependencies) { + this.dependencies = dependencies; + } + public void addDependency(String dependency) { this.dependencies.add(dependency); } diff --git a/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/NameSelector.java b/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/NameSelector.java index 044600ae6..0d5526580 100644 --- a/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/NameSelector.java +++ b/li.strolch.agent/src/main/java/li/strolch/runtime/query/inmemory/NameSelector.java @@ -35,7 +35,7 @@ public class NameSelector implements Selector { @Override public boolean select(T element) { String name = element.getName(); - return this.matchMode.matches(this.name, name); + return this.matchMode.matches(name, this.name); } /** diff --git a/li.strolch.agent/src/test/java/li/strolch/runtime/configuration/ConfigurationParserTest.java b/li.strolch.agent/src/test/java/li/strolch/runtime/configuration/ConfigurationParserTest.java index 64bdea36e..f0d5d0d85 100644 --- a/li.strolch.agent/src/test/java/li/strolch/runtime/configuration/ConfigurationParserTest.java +++ b/li.strolch.agent/src/test/java/li/strolch/runtime/configuration/ConfigurationParserTest.java @@ -78,6 +78,7 @@ public class ConfigurationParserTest { assertEquals("li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler", privilegeHandlerConfiguration.getImpl()); assertEquals(1, privilegeHandlerConfiguration.getPropertyKeys().size()); + assertEquals(1, privilegeHandlerConfiguration.getDependencies().size()); assertTrue(privilegeHandlerConfiguration.getDependencies().contains("PersistenceHandler")); assertEquals("PrivilegeConfig.xml", privilegeHandlerConfiguration.getString("privilegeConfigFile", null)); @@ -178,5 +179,26 @@ public class ConfigurationParserTest { assertEquals(2, realmHandlerConfiguration.getPropertyKeys().size()); assertEquals("EMPTY", realmHandlerConfiguration.getString("dataStoreMode", null)); assertEquals("noob", realmHandlerConfiguration.getString("foo", null)); + + // + // ServiceHandler + // li.strolch.service.api.ServiceHandler + // li.strolch.service.YetAnotherServiceHandler + // RealmHandler + // + // foo + // + // + ComponentConfiguration serviceHandlerConfiguration = strolchConfiguration + .getComponentConfiguration("ServiceHandler"); + assertNotNull("Should have created a ServiceHandler Configuration", serviceHandlerConfiguration); + assertEquals("ServiceHandler", serviceHandlerConfiguration.getName()); + assertEquals("li.strolch.service.api.ServiceHandler", serviceHandlerConfiguration.getApi()); + assertEquals("li.strolch.service.YetAnotherServiceHandler", serviceHandlerConfiguration.getImpl()); + assertEquals(2, serviceHandlerConfiguration.getDependencies().size()); + assertTrue(serviceHandlerConfiguration.getDependencies().contains("RealmHandler")); + assertTrue(serviceHandlerConfiguration.getDependencies().contains("PrivilegeHandler")); + assertEquals(1, serviceHandlerConfiguration.getPropertyKeys().size()); + assertEquals("foo", serviceHandlerConfiguration.getString("bar", null)); } } diff --git a/li.strolch.agent/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java b/li.strolch.agent/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java index 07d0d9904..238d9a3a5 100644 --- a/li.strolch.agent/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java +++ b/li.strolch.agent/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java @@ -189,6 +189,21 @@ public class InMemoryQueryTest { List result = dao.doQuery(ballQuery, new NoStrategyResourceVisitor()); assertEquals(1, result.size()); } + + @Test + public void shouldQueryByName() { + + List resources = getResources(); + resources.add(getBallResource()); + InMemoryResourceDao dao = new InMemoryResourceDao(); + dao.saveAll(resources); + + ResourceQuery ballQuery = new ResourceQuery(new StrolchTypeNavigation("Ball")); + ballQuery.with(new NameSelection("ball ", StringMatchMode.CONTAINS_CASE_INSENSITIVE)); + + List result = dao.doQuery(ballQuery, new NoStrategyResourceVisitor()); + assertEquals(1, result.size()); + } private Resource getBallResource() { Resource res1 = new Resource("childrensBall", "Ball 1", "Ball"); diff --git a/li.strolch.agent/src/test/resources/configtest/config/StrolchConfiguration.xml b/li.strolch.agent/src/test/resources/configtest/config/StrolchConfiguration.xml index db199a0cc..426ad172c 100644 --- a/li.strolch.agent/src/test/resources/configtest/config/StrolchConfiguration.xml +++ b/li.strolch.agent/src/test/resources/configtest/config/StrolchConfiguration.xml @@ -68,6 +68,17 @@ noob + + + ServiceHandler + li.strolch.service.api.ServiceHandler + li.strolch.service.YetAnotherServiceHandler + RealmHandler + PrivilegeHandler + + foo + + \ No newline at end of file diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlAuditDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlAuditDao.java index ad80954b2..7db25ac21 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlAuditDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlAuditDao.java @@ -15,10 +15,10 @@ */ package li.strolch.persistence.postgresql; -import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Timestamp; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Calendar; @@ -94,8 +94,8 @@ public class PostgreSqlAuditDao implements AuditDao { String sql = "select count(*) from " + TABLE_NAME + " where " + DATE + " between ? and ?"; //$NON-NLS-1$ try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) { - statement.setDate(1, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance()); - statement.setDate(2, new Date(dateRange.getToDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(1, new Timestamp(dateRange.getFromDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(2, new Timestamp(dateRange.getToDate().getTime()), Calendar.getInstance()); try (ResultSet result = statement.executeQuery()) { result.next(); @@ -113,8 +113,8 @@ public class PostgreSqlAuditDao implements AuditDao { try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) { statement.setString(1, type); - statement.setDate(2, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance()); - statement.setDate(3, new Date(dateRange.getToDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(2, new Timestamp(dateRange.getFromDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(3, new Timestamp(dateRange.getToDate().getTime()), Calendar.getInstance()); try (ResultSet result = statement.executeQuery()) { result.next(); @@ -174,8 +174,8 @@ public class PostgreSqlAuditDao implements AuditDao { try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) { statement.setString(1, type); - statement.setDate(2, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance()); - statement.setDate(3, new Date(dateRange.getToDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(2, new Timestamp(dateRange.getFromDate().getTime()), Calendar.getInstance()); + statement.setTimestamp(3, new Timestamp(dateRange.getToDate().getTime()), Calendar.getInstance()); try (ResultSet result = statement.executeQuery()) { while (result.next()) { @@ -278,8 +278,8 @@ public class PostgreSqlAuditDao implements AuditDao { try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) { preparedStatement.setString(1, type); - preparedStatement.setDate(2, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance()); - preparedStatement.setDate(3, new Date(dateRange.getToDate().getTime()), Calendar.getInstance()); + preparedStatement.setTimestamp(2, new Timestamp(dateRange.getFromDate().getTime()), Calendar.getInstance()); + preparedStatement.setTimestamp(3, new Timestamp(dateRange.getToDate().getTime()), Calendar.getInstance()); int modCount = preparedStatement.executeUpdate(); return modCount; @@ -315,14 +315,14 @@ public class PostgreSqlAuditDao implements AuditDao { ps.setString(2, audit.getUsername()); ps.setString(3, audit.getFirstname()); ps.setString(4, audit.getLastname()); - ps.setDate(5, new Date(audit.getDate().getTime()), Calendar.getInstance()); + ps.setTimestamp(5, new Timestamp(audit.getDate().getTime()), Calendar.getInstance()); ps.setString(6, audit.getElementType()); ps.setString(7, audit.getElementAccessed()); if (audit.getNewVersion() == null) ps.setDate(8, null); else - ps.setDate(8, new Date(audit.getNewVersion().getTime()), Calendar.getInstance()); + ps.setTimestamp(8, new Timestamp(audit.getNewVersion().getTime()), Calendar.getInstance()); ps.setString(9, audit.getAction()); ps.setString(10, audit.getAccessType().name()); @@ -335,10 +335,10 @@ public class PostgreSqlAuditDao implements AuditDao { audit.setUsername(resultSet.getString(2)); audit.setFirstname(resultSet.getString(3)); audit.setLastname(resultSet.getString(4)); - audit.setDate(resultSet.getDate(5)); + audit.setDate(resultSet.getTimestamp(5)); audit.setElementType(resultSet.getString(6)); audit.setElementAccessed(resultSet.getString(7)); - audit.setNewVersion(resultSet.getDate(8)); + audit.setNewVersion(resultSet.getTimestamp(8)); audit.setAction(resultSet.getString(9)); audit.setAccessType(AccessType.valueOf(resultSet.getString(10))); return audit; diff --git a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java index d5268098b..fbf7740c5 100644 --- a/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java +++ b/li.strolch.persistence.postgresql/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java @@ -17,11 +17,11 @@ package li.strolch.persistence.postgresql; import java.io.IOException; import java.io.InputStream; -import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLXML; +import java.sql.Timestamp; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Calendar; @@ -107,7 +107,7 @@ public class PostgreSqlOrderDao extends PostgresqlDao implements OrderDao preparedStatement.setString(2, order.getName()); preparedStatement.setString(3, order.getType()); preparedStatement.setString(4, order.getState().name()); - preparedStatement.setDate(5, new Date(order.getDate().getTime()), Calendar.getInstance()); + preparedStatement.setTimestamp(5, new Timestamp(order.getDate().getTime()), Calendar.getInstance()); SQLXML sqlxml = createSqlXml(order, preparedStatement); preparedStatement.setSQLXML(6, sqlxml); @@ -137,7 +137,7 @@ public class PostgreSqlOrderDao extends PostgresqlDao implements OrderDao preparedStatement.setString(1, order.getName()); preparedStatement.setString(2, order.getType()); preparedStatement.setString(3, order.getState().name()); - preparedStatement.setDate(4, new Date(order.getDate().getTime()), Calendar.getInstance()); + preparedStatement.setTimestamp(4, new Timestamp(order.getDate().getTime()), Calendar.getInstance()); preparedStatement.setString(6, order.getId()); SQLXML sqlxml = createSqlXml(order, preparedStatement); diff --git a/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/CachedDaoTest.java b/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/CachedDaoTest.java index aa46c0f91..7e1057abe 100644 --- a/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/CachedDaoTest.java +++ b/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/CachedDaoTest.java @@ -30,6 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.eitchnet.db.DbSchemaVersionCheck; +import ch.eitchnet.utils.Version; import ch.eitchnet.utils.helper.StringHelper; public class CachedDaoTest extends AbstractModelTest { @@ -65,7 +66,7 @@ public class CachedDaoTest extends AbstractModelTest { } public static void dropSchema(String dbUrl, String dbUsername, String dbPassword) throws Exception { - String dbVersion = DbSchemaVersionCheck.getExpectedDbVersion(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, + Version dbVersion = DbSchemaVersionCheck.getExpectedDbVersion(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, PostgreSqlPersistenceHandler.class); logger.info(MessageFormat.format("Dropping schema for expected version {0}", dbVersion)); String sql = DbSchemaVersionCheck.getSql(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, diff --git a/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/DbMigrationTest.java b/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/DbMigrationTest.java index 4c5c8f79b..3ad34b7fa 100644 --- a/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/DbMigrationTest.java +++ b/li.strolch.persistence.postgresql/src/test/java/li/strolch/persistence/postgresql/dao/test/DbMigrationTest.java @@ -23,7 +23,6 @@ import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.dropSchem import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; -import java.sql.Statement; import java.text.MessageFormat; import li.strolch.persistence.postgresql.PostgreSqlPersistenceHandler; @@ -34,6 +33,7 @@ import org.junit.Test; import ch.eitchnet.db.DbException; import ch.eitchnet.db.DbSchemaVersionCheck; +import ch.eitchnet.utils.Version; /** * @author Robert von Burg @@ -56,17 +56,16 @@ public class DbMigrationTest { DbSchemaVersionCheck dbCheck = new DbSchemaVersionCheck(scriptPrefix, ctxClass, allowSchemaCreation, allowSchemaMigration, allowSchemaDrop); - try (Connection con = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD); - Statement st = con.createStatement();) { + try (Connection con = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) { // DROP 0.2.1 - dbCheck.dropSchema(StrolchConstants.DEFAULT_REALM, "0.2.1", st); + dbCheck.dropSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.1")); // CREATE 0.2.0 - dbCheck.createSchema(StrolchConstants.DEFAULT_REALM, "0.2.0", st); + dbCheck.createSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.0")); // MIGRATE 0.2.1 - dbCheck.migrateSchema(StrolchConstants.DEFAULT_REALM, "0.2.1", st); + dbCheck.migrateSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.1")); } catch (SQLException e) { String msg = "Failed to open DB connection to URL {0} due to: {1}"; //$NON-NLS-1$ diff --git a/li.strolch.service/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java b/li.strolch.service/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java index 5fb328ada..5a574206c 100644 --- a/li.strolch.service/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java +++ b/li.strolch.service/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java @@ -38,6 +38,7 @@ import org.junit.Before; import ch.eitchnet.db.DbSchemaVersionCheck; import ch.eitchnet.privilege.model.Certificate; +import ch.eitchnet.utils.Version; /** * @author Robert von Burg @@ -77,7 +78,7 @@ public abstract class AbstractRealmServiceTest { } public static void dropSchema(String dbUrl, String dbUsername, String dbPassword) throws Exception { - String dbVersion = DbSchemaVersionCheck.getExpectedDbVersion(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, + Version dbVersion = DbSchemaVersionCheck.getExpectedDbVersion(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, PostgreSqlPersistenceHandler.class); String sql = DbSchemaVersionCheck.getSql(PostgreSqlPersistenceHandler.SCRIPT_PREFIX, PostgreSqlPersistenceHandler.class, dbVersion, "drop"); //$NON-NLS-1$