diff --git a/caosdb-webui b/caosdb-webui index 23307f2950bec8da4a1f64cc552a00093b7b9b41..136582641fb1b675d9630b4eacea54fbf7765eea 160000 --- a/caosdb-webui +++ b/caosdb-webui @@ -1 +1 @@ -Subproject commit 23307f2950bec8da4a1f64cc552a00093b7b9b41 +Subproject commit 136582641fb1b675d9630b4eacea54fbf7765eea diff --git a/src/main/java/caosdb/server/accessControl/UserSources.java b/src/main/java/caosdb/server/accessControl/UserSources.java index a3f35c11b0f3bcc10e67397bd8c48c6e969fcc7d..7a0298f6ddb7722eecbb1cf8c0cd115bbedb5b7e 100644 --- a/src/main/java/caosdb/server/accessControl/UserSources.java +++ b/src/main/java/caosdb/server/accessControl/UserSources.java @@ -1,36 +1,28 @@ /* - * ** header v3.0 - * This file is a part of the CaosDB Project. + * ** header v3.0 This file is a part of the CaosDB Project. * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen + * Copyright (C) 2018 Research Group Biomedical Physics, Max-Planck-Institute for Dynamics and + * Self-Organization Göttingen * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see <https://www.gnu.org/licenses/>. * * ** end header */ package caosdb.server.accessControl; -import caosdb.server.CaosDBServer; -import caosdb.server.ServerProperties; -import caosdb.server.entity.Message; -import caosdb.server.transaction.RetrieveRoleTransaction; -import caosdb.server.transaction.RetrieveUserTransaction; -import caosdb.server.utils.ServerMessages; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.HashSet; import java.util.Set; @@ -39,6 +31,12 @@ import org.apache.shiro.config.Ini; import org.apache.shiro.subject.PrincipalCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import caosdb.server.CaosDBServer; +import caosdb.server.ServerProperties; +import caosdb.server.entity.Message; +import caosdb.server.transaction.RetrieveRoleTransaction; +import caosdb.server.transaction.RetrieveUserTransaction; +import caosdb.server.utils.ServerMessages; public class UserSources extends HashMap<String, UserSource> { @@ -60,10 +58,8 @@ public class UserSources extends HashMap<String, UserSource> { private UserSources() { initMap(); this.put(getInternalRealm()); - final String[] realms = - this.map - .getSectionProperty(Ini.DEFAULT_SECTION_NAME, KEY_REALMS) - .split("(\\s*,\\s*)|(\\s+)"); + final String[] realms = this.map.getSectionProperty(Ini.DEFAULT_SECTION_NAME, KEY_REALMS) + .split("(\\s*,\\s*)|(\\s+)"); for (final String realm : realms) { if (realm != null && !realm.isEmpty()) { final String className = this.map.getSectionProperty(realm, KEY_REALM_CLASS); @@ -72,12 +68,10 @@ public class UserSources extends HashMap<String, UserSource> { @SuppressWarnings("unchecked") final Class<? extends UserSource> clazz = (Class<? extends UserSource>) Class.forName(className); - this.put(clazz.newInstance()); - } catch (final ClassNotFoundException e) { - logger.error("LOAD_USER_SOURCE", e); - } catch (final InstantiationException e) { - logger.error("LOAD_USER_SOURCE", e); - } catch (final IllegalAccessException e) { + this.put(clazz.getDeclaredConstructor().newInstance()); + } catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | SecurityException | ClassNotFoundException | InstantiationException + | IllegalAccessException e) { logger.error("LOAD_USER_SOURCE", e); } } @@ -105,9 +99,8 @@ public class UserSources extends HashMap<String, UserSource> { public void initMap() { this.map = null; try { - final FileInputStream f = - new FileInputStream( - CaosDBServer.getServerProperty(ServerProperties.KEY_USER_SOURCES_INI_FILE)); + final FileInputStream f = new FileInputStream( + CaosDBServer.getServerProperty(ServerProperties.KEY_USER_SOURCES_INI_FILE)); this.map = new Ini(); this.map.load(f); f.close(); diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java index 0e557da58074729b9c3635453dd4b84b657599bb..a7a5c607df280a29c89a947e276bfdb789d11baa 100644 --- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java +++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java @@ -22,14 +22,14 @@ */ package caosdb.server.database.backend.implementation.MySQL; -import caosdb.server.database.access.Access; -import caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl; -import caosdb.server.database.exceptions.TransactionException; -import caosdb.server.database.proto.SparseEntity; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Iterator; +import caosdb.server.database.access.Access; +import caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl; +import caosdb.server.database.exceptions.TransactionException; +import caosdb.server.database.proto.SparseEntity; public class MySQLRetrieveAllUncheckedFiles extends MySQLTransaction implements RetrieveAllUncheckedFilesImpl { diff --git a/src/main/java/caosdb/server/datatype/AbstractDatatype.java b/src/main/java/caosdb/server/datatype/AbstractDatatype.java index c14490ef5250d03d9daa53e85ac7062d764cba18..81072a72f2026c8b6fa4dbea65a3e99b85b513e4 100644 --- a/src/main/java/caosdb/server/datatype/AbstractDatatype.java +++ b/src/main/java/caosdb/server/datatype/AbstractDatatype.java @@ -22,11 +22,11 @@ */ package caosdb.server.datatype; +import java.util.HashMap; +import org.reflections.Reflections; import caosdb.server.entity.EntityInterface; import caosdb.server.entity.Message; import caosdb.server.entity.container.Container; -import java.util.HashMap; -import org.reflections.Reflections; public abstract class AbstractDatatype { @@ -90,7 +90,7 @@ public abstract class AbstractDatatype { for (final Class<? extends AbstractDatatype> c : datatypePackage.getSubTypesOf(AbstractDatatype.class)) { if (c.isAnnotationPresent(DatatypeDefinition.class)) { - final AbstractDatatype dt = c.newInstance(); + final AbstractDatatype dt = c.getDeclaredConstructor().newInstance(); final String name = c.getAnnotation(DatatypeDefinition.class).name().toUpperCase(); dt.name = name; instances.put(name, dt); diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java index b3551b4dd92084e6296a57be4166b341efa68262..fb6b4aeb91e4d3227fb6b773dae26118c115b92a 100644 --- a/src/main/java/caosdb/server/jobs/Job.java +++ b/src/main/java/caosdb/server/jobs/Job.java @@ -22,6 +22,16 @@ */ package caosdb.server.jobs; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.subject.Subject; +import org.reflections.Reflections; import caosdb.server.CaosDBException; import caosdb.server.database.BackendTransaction; import caosdb.server.database.backend.transaction.GetIDByName; @@ -44,15 +54,6 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.Observable; import caosdb.server.utils.Observer; import caosdb.server.utils.ServerMessages; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.Permission; -import org.apache.shiro.subject.Subject; -import org.reflections.Reflections; public abstract class Job extends AbstractObservable implements Observer { private Transaction<? extends TransactionContainer> transaction = null; @@ -84,10 +85,10 @@ public abstract class Job extends AbstractObservable implements Observer { protected ScheduledJob appendJob(final EntityInterface entity, final Class<? extends Job> clazz) { try { - final Job job = clazz.newInstance(); + final Job job = clazz.getDeclaredConstructor().newInstance(); job.init(getMode(), entity, getTransaction()); return getTransaction().getSchedule().add(job); - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { throw new CaosDBException(e); } } @@ -326,12 +327,12 @@ public abstract class Job extends AbstractObservable implements Observer { try { if (jobClass != null) { - ret = jobClass.newInstance(); + ret = jobClass.getDeclaredConstructor().newInstance(); ret.init(mode, entity, transaction); return ret; } return null; - } catch (final InstantiationException | IllegalAccessException e) { + } catch (final InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { throw new TransactionException(e); } } diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java index 229abc218ba5afd7b43eec31106fbcd5c2080b34..92fdfed58f921db27471e7eb457529628ca7b516 100644 --- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java +++ b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java @@ -1,5 +1,6 @@ package caosdb.server.jobs.extension; +import java.util.Objects; import caosdb.server.CaosDBServer; import caosdb.server.database.exceptions.EntityDoesNotExistException; import caosdb.server.entity.EntityInterface; @@ -7,7 +8,6 @@ import caosdb.server.entity.Role; import caosdb.server.entity.wrapper.Property; import caosdb.server.jobs.ContainerJob; import caosdb.server.utils.Utils; -import java.util.Objects; public abstract class AWIBoxLoanModel extends ContainerJob { @@ -63,7 +63,7 @@ public abstract class AWIBoxLoanModel extends ContainerJob { Integer getIdOf(String string) { String id = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_ID"); if (id != null && Utils.isNonNullInteger(id)) { - return new Integer(id); + return Integer.parseInt(id); } String name = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_NAME"); if (name == null || name.isEmpty()) { diff --git a/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java b/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java index 907700ee53423a2d8d0088aaf6beb2e6b175f240..41778ac6ca184d819b42954a80369df813373297 100644 --- a/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java +++ b/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java @@ -22,11 +22,6 @@ */ package caosdb.server.jobs.extension; -import caosdb.server.CaosDBException; -import caosdb.server.entity.FileProperties; -import caosdb.server.entity.Message; -import caosdb.server.jobs.EntityJob; -import caosdb.server.utils.FileUtils; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.Connection; @@ -39,10 +34,16 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.concurrent.locks.ReentrantLock; +import caosdb.server.CaosDBException; +import caosdb.server.entity.FileProperties; +import caosdb.server.entity.Message; +import caosdb.server.jobs.EntityJob; +import caosdb.server.utils.FileUtils; public class SQLiteTransaction extends EntityJob { private static HashMap<String, ReentrantLock> lockedTables = new HashMap<String, ReentrantLock>(); + @SuppressWarnings("unlikely-arg-type") @Override public final void run() { Connection con = null; diff --git a/src/main/java/caosdb/server/query/StoredAt.java b/src/main/java/caosdb/server/query/StoredAt.java index 78a5446db17151f72d9b1a366c819c1a55adceff..243822f740f0410345fe322e472146d4a965039b 100644 --- a/src/main/java/caosdb/server/query/StoredAt.java +++ b/src/main/java/caosdb/server/query/StoredAt.java @@ -23,8 +23,6 @@ package caosdb.server.query; import static java.sql.Types.VARCHAR; - -import caosdb.server.query.Query.QueryException; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.CallableStatement; @@ -32,6 +30,7 @@ import java.sql.SQLException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jdom2.Element; +import caosdb.server.query.Query.QueryException; public class StoredAt implements EntityFilterInterface { @@ -76,14 +75,12 @@ public class StoredAt implements EntityFilterInterface { */ static String convertLikeLocation(String location) { final String evenB = "(^|[^b*])(bb)*"; - final String oddB = evenB + "b"; final String singleEscapedAst = "b\\*"; final String findSingleAst = (evenB + "(" + singleEscapedAst + ")?" + "\\*([^*]|$)").replace("b", "\\\\"); final String findMultipleAst = (evenB + "(" + singleEscapedAst + ")?" + "\\*{2,}").replace("b", "\\\\"); java.util.regex.Pattern singlePat = Pattern.compile(findSingleAst); - java.util.regex.Pattern multiplePat = Pattern.compile(findMultipleAst); // Simple SQL escape replacements String converted = location.replaceFirst("^/", "").replace("%", "\\%").replace("_", "\\_"); diff --git a/src/main/java/caosdb/server/utils/mail/Mail.java b/src/main/java/caosdb/server/utils/mail/Mail.java index 06ecc2338a3ec7dc0e057a83bccd538dbb1a74e1..36d5e9332ff33c925c8b04c8ae44d0e4e5120537 100644 --- a/src/main/java/caosdb/server/utils/mail/Mail.java +++ b/src/main/java/caosdb/server/utils/mail/Mail.java @@ -22,9 +22,9 @@ */ package caosdb.server.utils.mail; +import java.util.Date; import caosdb.server.CaosDBServer; import caosdb.server.ServerProperties; -import java.util.Date; public class Mail { @@ -36,7 +36,7 @@ public class Mail { @SuppressWarnings("unchecked") Class<? extends MailHandler> mailHandlerClass = (Class<? extends MailHandler>) Class.forName(clazz); - handler = mailHandlerClass.newInstance(); + handler = mailHandlerClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/test/java/caosdb/server/query/TestCQL.java b/src/test/java/caosdb/server/query/TestCQL.java index 54d4339b2fa5b41eb6ad3f4823be0b48e131fd56..ebe1cc8c53b5beaeb3762565f351fe801d20f649 100644 --- a/src/test/java/caosdb/server/query/TestCQL.java +++ b/src/test/java/caosdb/server/query/TestCQL.java @@ -28,15 +28,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; - -import caosdb.server.CaosDBServer; -import caosdb.server.database.access.Access; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.database.exceptions.TransactionException; -import caosdb.server.query.CQLParser.CqContext; -import caosdb.server.query.Query.Pattern; -import caosdb.server.query.Query.QueryException; -import caosdb.server.utils.Initialization; import java.io.IOException; import java.sql.SQLException; import java.util.LinkedList; @@ -47,6 +38,14 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.junit.BeforeClass; import org.junit.Test; +import caosdb.server.CaosDBServer; +import caosdb.server.database.access.Access; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.database.exceptions.TransactionException; +import caosdb.server.query.CQLParser.CqContext; +import caosdb.server.query.Query.Pattern; +import caosdb.server.query.Query.QueryException; +import caosdb.server.utils.Initialization; public class TestCQL { @@ -5015,7 +5014,7 @@ public class TestCQL { assertTrue(sfq.filter instanceof StoredAt); final StoredAt storedAt = (StoredAt) sfq.filter; - assertTrue(storedAt.requiresPatternMatching(storedAt.location)); + assertTrue(StoredAt.requiresPatternMatching(storedAt.location)); assertEquals("SAT(%%)", storedAt.toString()); } @@ -5053,7 +5052,7 @@ public class TestCQL { assertTrue(sfq.filter instanceof StoredAt); final StoredAt storedAt = (StoredAt) sfq.filter; - assertTrue(storedAt.requiresPatternMatching(storedAt.location)); + assertTrue(StoredAt.requiresPatternMatching(storedAt.location)); assertEquals("SAT(%%/)", storedAt.toString()); }