diff --git a/logicaldoc-cmis/src/main/java/com/logicaldoc/cmis/LDCmisService.java b/logicaldoc-cmis/src/main/java/com/logicaldoc/cmis/LDCmisService.java index 37d3bbd63..9f46eed96 100644 --- a/logicaldoc-cmis/src/main/java/com/logicaldoc/cmis/LDCmisService.java +++ b/logicaldoc-cmis/src/main/java/com/logicaldoc/cmis/LDCmisService.java @@ -206,7 +206,7 @@ protected String getLatestChangeLogToken(String repositoryId) throws Persistence return "0"; } else { log.debug("latestDate.getTime(): {}", latestDate != null ? latestDate.getTime() : ""); - log.debug("latestFolderDate.getTime(): {}", latestDate != null ? latestFolderDate.getTime() : ""); + log.debug("latestFolderDate.getTime(): {}", latestFolderDate != null ? latestFolderDate.getTime() : ""); Timestamp myDate = getLatestTimestamp(latestDate, latestFolderDate); log.debug("myDate.getTime(): {}", myDate.getTime()); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/HibernatePersistentObjectDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/HibernatePersistentObjectDAO.java index d2a359fe7..41d6cd72c 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/HibernatePersistentObjectDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/HibernatePersistentObjectDAO.java @@ -672,7 +672,6 @@ public String queryForString(String sql) throws PersistenceException { } catch (EmptyResultDataAccessException e) { return null; } catch (Exception e) { - log.error(e.getMessage(), e); throw new PersistenceException(e); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/RunLevel.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/RunLevel.java index a655575d6..29387029d 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/RunLevel.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/RunLevel.java @@ -7,6 +7,8 @@ import java.util.List; import org.java.plugin.registry.Extension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.logicaldoc.util.Context; import com.logicaldoc.util.config.ContextProperties; @@ -22,13 +24,14 @@ public enum RunLevel { DEFAULT("default"), BULKLOAD("bulkload"), DEVEL("devel"), DEMO("demo"), UPDATED("updated"), SLAVE("slave"); + private static Logger log = LoggerFactory.getLogger(RunLevel.class); + private String level; RunLevel(String level) { this.level = level; } - @Override public String toString() { return this.level; @@ -36,8 +39,7 @@ public String toString() { public static RunLevel current() { ContextProperties config = getConfig(); - String runLevel = config != null ? config.getProperty("runlevel", DEFAULT.toString()) - : DEFAULT.toString(); + String runLevel = config != null ? config.getProperty("runlevel", DEFAULT.toString()) : DEFAULT.toString(); return RunLevel.fromString(runLevel); } @@ -79,7 +81,7 @@ private static ContextProperties getConfig() { try { conf = new ContextProperties(); } catch (IOException e) { - System.out.println(e.getMessage()); + log.error(e.getMessage(), e); } return conf; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/automation/SearchTool.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/automation/SearchTool.java index 290c4470c..b5c1a0d38 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/automation/SearchTool.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/automation/SearchTool.java @@ -128,9 +128,8 @@ public List search(long tenantId, String expression, List filters, hitsIdsCondition.append(")"); } - StringBuilder richQuery = new StringBuilder(); // Find real documents - richQuery = new StringBuilder( + StringBuilder richQuery = new StringBuilder( "select A.ld_id, A.ld_customid, A.ld_docref, A.ld_type, A.ld_version, A.ld_lastmodified, "); richQuery .append(" A.ld_date, A.ld_publisher, A.ld_creation, A.ld_creator, A.ld_filesize, A.ld_immutable, "); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/EMailSender.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/EMailSender.java index 22610a3b9..3c2bc3d01 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/EMailSender.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/EMailSender.java @@ -336,7 +336,6 @@ public void send(EMail email) throws MessagingException { Transport trans = buildTransport(sess); Address[] adr = message.getAllRecipients(); - // message.setSentDate(new Date()); MailDateFormat formatter = new MailDateFormat(); formatter.setTimeZone(TimeZone.getTimeZone("GMT")); // always use UTC @@ -432,7 +431,6 @@ private Properties prepareMailSessionProperties() { props.put("mail.smtp.ssl.protocols", "TLSv1.1 TLSv1.2"); props.put("mail.smtp.ssl.checkserveridentity", "false"); props.put("mail.smtp.ssl.trust", "*"); - // props.put("mail.debug", "true"); return props; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/MailUtil.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/MailUtil.java index 49221565f..61c938bfd 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/MailUtil.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/communication/MailUtil.java @@ -173,17 +173,15 @@ private static void copyMetadata(EMail email, com.auxilii.msgparser.Message msg) rec.setType(Recipient.TYPE_EMAIL); email.getRecipients().add(rec); - if (StringUtils.isEmpty(email.getMessageText())) - if (StringUtils.isNotEmpty(msg.getBodyRTF())) { - email.setMessageText(msg.getBodyRTF()); - email.setHtml(0); - } + if (StringUtils.isEmpty(email.getMessageText()) && StringUtils.isNotEmpty(msg.getBodyRTF())) { + email.setMessageText(msg.getBodyRTF()); + email.setHtml(0); + } - if (StringUtils.isEmpty(email.getMessageText())) - if (StringUtils.isNotEmpty(msg.getBodyText())) { - email.setMessageText(msg.getBodyText()); - email.setHtml(0); - } + if (StringUtils.isEmpty(email.getMessageText()) && StringUtils.isNotEmpty(msg.getBodyText())) { + email.setMessageText(msg.getBodyText()); + email.setHtml(0); + } List recs = msg.getCcRecipients(); for (RecipientEntry entry : recs) { @@ -260,7 +258,6 @@ public static MimeMessage readMime(InputStream is) throws MessagingException { props.put("mail.smtp.provider.class", CustomTransport.class.getName()); props.put("mail.smtp.provider.vendor", "foo"); props.put("mail.smtp.provider.version", "0.0.0"); - // props.put("mail.host", "smtp.unexisting.com"); try { Session mailSession = Session.getInstance(props, null); @@ -366,7 +363,7 @@ private static void setReplyTo(javax.mail.Message msg, EMail email) throws Messa return rec; }).collect(Collectors.toSet())); } catch (Exception t) { - log.warn("Unable to extract BCC addresses - %s", t.getMessage()); + log.warn("Unable to extract BCC addresses {}", t.getMessage()); } } } @@ -384,7 +381,7 @@ private static void setBCC(javax.mail.Message msg, EMail email) throws Messaging return rec; }).collect(Collectors.toSet())); } catch (Exception t) { - log.warn("Unable to extract BCC addresses - %s", t.getMessage()); + log.warn("Unable to extract BCC addresses {}", t.getMessage()); } } } @@ -402,7 +399,7 @@ private static void setCC(javax.mail.Message msg, EMail email) throws MessagingE return rec; }).collect(Collectors.toSet())); } catch (Exception t) { - log.warn("Unable to extract CC addresses - %s", t.getMessage()); + log.warn("Unable to extract CC addresses {}", t.getMessage()); } } } @@ -420,7 +417,7 @@ private static void setTO(javax.mail.Message msg, EMail email) throws MessagingE return rec; }).collect(Collectors.toSet())); } catch (Exception t) { - log.warn("Unable to extract TO addresses - %s", t.getMessage()); + log.warn("Unable to extract TO addresses {}", t.getMessage()); } } } @@ -554,7 +551,7 @@ private static String getText(Part p) throws MessagingException, IOException { */ private static String extractTextFromTextStar(Part p) throws IOException, MessagingException { Object obj = p.getContent(); - String str = NO_BODY; + String str; if (obj instanceof InputStream) { InputStream is = (InputStream) obj; @@ -586,7 +583,6 @@ private static String extractTextFromMultipartAlernative(Part p) throws IOExcept // prefer html over plain text Multipart mp = (Multipart) p.getContent(); String text = "T" + NO_BODY; - // log.info("Mime Parts: {}", mp.getCount()); for (int i = 0; i < mp.getCount(); i++) { Part bp = mp.getBodyPart(i); @@ -759,10 +755,9 @@ private static void extractPartText(Object content, StringBuilder textBody) thro String disposition = part.getDisposition(); String contentType = part.getContentType(); - if ((disposition == null || "inline".equals(disposition)) && contentType != null) { - if (contentType.toLowerCase().startsWith("text/plain")) { - textBody.append(part.getContent()); - } + if ((disposition == null || "inline".equals(disposition)) && contentType != null + && contentType.toLowerCase().startsWith("text/plain")) { + textBody.append(part.getContent()); } return; } @@ -799,7 +794,6 @@ public CustomTransport(Session smtpSession, URLName urlName) { @Override public void sendMessage(Message message, Address[] addresses) throws MessagingException { // Take the message and write it somewhere - // e.g.: a logger or an OutputStream message.writeTo(...); } @Override diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/CompressedArchiveConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/CompressedArchiveConverter.java index d2be6afc5..25ace7936 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/CompressedArchiveConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/CompressedArchiveConverter.java @@ -14,7 +14,7 @@ import com.logicaldoc.util.io.FileUtil; /** - * A base class for those converters that operate on comressed archives + * A base class for those converters that operate on compressed archives * * @author Marco Meschieri - LogicalDOC * @since 8.8.3 @@ -23,7 +23,7 @@ public abstract class CompressedArchiveConverter extends AbstractFormatConverter protected static Logger log = LoggerFactory.getLogger(CompressedArchiveConverter.class); - protected void convertMultipleEntries(String sid, Document document, File src, File dest, List entries) + protected void convertMultipleEntries(String sid, Document document, File dest, List entries) throws IOException { File tempFile = FileUtil.createTempFile("zipconvert", ".txt"); try (FileWriter writer = new FileWriter(tempFile);) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/FormatConverterManager.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/FormatConverterManager.java index fa6324f57..a3585768d 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/FormatConverterManager.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/FormatConverterManager.java @@ -434,19 +434,19 @@ public FormatConverter getConverter(String inFileName, String outFileName) { String inOutkey = composeKey(inFileName, outFileName); - List converters = getConverters().get(inOutkey); - if (converters == null || converters.isEmpty()) - converters = getConverters().get("*-pdf"); - if (converters == null || converters.isEmpty()) - log.warn("No format converter for file " + inFileName); + List convrters = getConverters().get(inOutkey); + if (convrters == null || convrters.isEmpty()) + convrters = getConverters().get("*-pdf"); + if (convrters == null || convrters.isEmpty()) + log.warn("No format converter for file {}", inFileName); // Get the first available converter - FormatConverter converter = converters != null ? converters.get(0) : null; + FormatConverter converter = convrters != null ? convrters.get(0) : null; // Check if a special binding is configured String currentConverter = config.getProperty("converter." + inOutkey); if (StringUtils.isNotEmpty(currentConverter)) - for (FormatConverter formatConverter : converters) { + for (FormatConverter formatConverter : convrters) { if (formatConverter.getClass().getName().equals(currentConverter)) { converter = formatConverter; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/GhostscriptConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/GhostscriptConverter.java index 83c6e77fa..a4222b160 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/GhostscriptConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/GhostscriptConverter.java @@ -42,12 +42,7 @@ else if ("png".equals(ext)) { else if ("eps".equals(ext)) device = "eps2write "; - int timeout = 30; - try { - timeout = Integer.parseInt(getParameter("timeout")); - } catch (Exception t) { - // Nothing to do - } + int timeout = getTimeout(); String arguments = getParameter("arguments"); String commandLine = getParameter("path") + " " + (arguments != null ? arguments : "") + " -sDEVICE=" @@ -63,6 +58,16 @@ else if ("eps".equals(ext)) } } + private int getTimeout() { + int timeout = 30; + try { + timeout = Integer.parseInt(getParameter("timeout")); + } catch (Exception t) { + // Nothing to do + } + return timeout; + } + @Override public List getParameterNames() { return Arrays.asList("path", "arguments", "timeout"); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ImageConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ImageConverter.java index 8b229b2fd..f6a5109f0 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ImageConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ImageConverter.java @@ -29,12 +29,7 @@ public void internalConvert(String sid, Document document, File src, File dest) throw new IOException("Unable to convert image to " + ext); try { - int timeout = 10; - try { - timeout = Integer.parseInt(getParameter("timeout")); - } catch (Exception t) { - // Nothing to do - } + int timeout = getTimeout(); String commandLine = getParameter("path") + " -compress JPEG " + src.getPath() + " " + dest.getPath(); new Exec().exec(commandLine, null, null, timeout); @@ -48,6 +43,16 @@ public void internalConvert(String sid, Document document, File src, File dest) } } + private int getTimeout() { + int timeout = 10; + try { + timeout = Integer.parseInt(getParameter("timeout")); + } catch (Exception t) { + // Nothing to do + } + return timeout; + } + @Override public List getParameterNames() { return Arrays.asList("path", "timeout"); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/RarConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/RarConverter.java index ab1268dd1..47aa62174 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/RarConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/RarConverter.java @@ -24,7 +24,7 @@ public class RarConverter extends CompressedArchiveConverter { public void internalConvert(String sid, Document document, File src, File dest) throws IOException { List entries = new RarUtil().listEntries(src); if (entries.size() > 1) - convertMultipleEntries(sid, document, src, dest, entries); + convertMultipleEntries(sid, document, dest, entries); else convertSingleEntry(sid, document, src, dest, entries.get(0)); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/SevenZipConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/SevenZipConverter.java index 65e0e00e9..bda7fa58f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/SevenZipConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/SevenZipConverter.java @@ -24,7 +24,7 @@ public class SevenZipConverter extends CompressedArchiveConverter { public void internalConvert(String sid, Document document, File src, File dest) throws IOException { List entries = new SevenZipUtil().listEntries(src); if (entries.size() > 1) - convertMultipleEntries(sid, document, src, dest, entries); + convertMultipleEntries(sid, document, dest, entries); else convertSingleEntry(sid, document, src, dest, entries.get(0)); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/TarConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/TarConverter.java index 9a98eb1dc..c12d6682c 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/TarConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/TarConverter.java @@ -24,13 +24,13 @@ public class TarConverter extends CompressedArchiveConverter { public void internalConvert(String sid, Document document, File src, File dest) throws IOException { List entries = new TarUtil().listEntries(src); if (entries.size() > 1) - convertMultipleEntries(sid, document, src, dest, entries); + convertMultipleEntries(sid, document, dest, entries); else convertSingleEntry(sid, document, src, dest, entries.get(0)); } @Override protected void extractEntry(File archiveFile, String entry, File uncompressedEntryFile) throws IOException { - new TarUtil().extractEntry(archiveFile, entry, uncompressedEntryFile); + new TarUtil().extractEntry(archiveFile, uncompressedEntryFile); } } \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/XMLConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/XMLConverter.java index f583c4c98..4f2715fec 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/XMLConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/XMLConverter.java @@ -266,11 +266,9 @@ private Map loadStyleSheets() { if (StringUtils.isNotEmpty(value)) { String[] styles = value.split("\\,"); for (String style : styles) { - if (StringUtils.isNoneEmpty(style)) { - if (style.contains("|")) { - String[] tokens = style.trim().split("\\|"); - map.put(tokens[0].trim(), tokens[1].trim()); - } + if (StringUtils.isNoneEmpty(style) && style.contains("|")) { + String[] tokens = style.trim().split("\\|"); + map.put(tokens[0].trim(), tokens[1].trim()); } } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ZipConverter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ZipConverter.java index a3ac4b082..c0924f2da 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ZipConverter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/conversion/ZipConverter.java @@ -67,7 +67,7 @@ private void convertZip(String sid, Document document, File src, File dest) thro ZipUtil zipUtil = new ZipUtil(); List entries = zipUtil.listEntries(src); if (entries.size() > 1) - convertMultipleEntries(sid, document, src, dest, entries); + convertMultipleEntries(sid, document, dest, entries); else convertSingleEntry(sid, document, src, dest, entries.get(0)); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/dashlet/DashletContent.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/dashlet/DashletContent.java index d42135afc..ff1d93588 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/dashlet/DashletContent.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/dashlet/DashletContent.java @@ -101,9 +101,9 @@ protected void service(HttpServletRequest request, HttpServletResponse response) if (Dashlet.TYPE_DOCEVENT.equals(dashlet.getType())) handleDocumentEvent(showSid, locale, dashlet, dashletDictionary, automation, writer); else if (Dashlet.TYPE_DOCUMENT.equals(dashlet.getType())) - handleDocument(showSid, locale, dashlet, dashletDictionary, automation, writer); + handleDocument(locale, dashlet, dashletDictionary, automation, writer); else if (Dashlet.TYPE_NOTE.equals(dashlet.getType())) - handleNote(showSid, locale, dashlet, dashletDictionary, automation, writer); + handleNote(dashlet, dashletDictionary, automation, writer); else if (Dashlet.TYPE_CONTENT.equals(dashlet.getType())) handleContent(dashlet, dashletDictionary, automation, writer); } catch (NumberFormatException | ServletException | PersistenceException | IOException e) { @@ -132,10 +132,9 @@ private void handleDocumentEvent(boolean showSid, Locale locale, Dashlet dashlet } else { writer.write(LIST_TAG); - List records = new ArrayList<>(); DocumentHistoryDAO hdao = (DocumentHistoryDAO) Context.get().getBean(DocumentHistoryDAO.class); String query = automation.evaluate(dashlet.getQuery(), dashletDictionary); - records = hdao.findByObjectQuery(query.trim(), (Map) null, + List records = hdao.findByObjectQuery(query.trim(), (Map) null, dashlet.getUnique() == 0 ? dashlet.getMax() : null); List uniqueRecords = filterUniqueDocumentEvents(dashlet, records); @@ -248,7 +247,7 @@ private void printDocumentEvent(boolean showSid, Locale locale, Dashlet dashlet, * fieldsMap is used to maximize the listing performances. */ Map extValues = new HashMap<>(); - retrieveExtendedAttributes(locale, dashlet, uniqueRecords, extValues, attrs); + retrieveExtendedAttributes(locale, uniqueRecords, extValues, attrs); printExtendedAttributes(df, writer, doc, attrs, extValues); } @@ -261,7 +260,6 @@ private void printDocumentEvent(boolean showSid, Locale locale, Dashlet dashlet, * given history records * * @param locale the current locale - * @param dashlet the dashlet currently elaborated * @param records the list of retrieved histories * @param extValues The key is documentId-atttributeName, the value is the * attribute value @@ -269,8 +267,8 @@ private void printDocumentEvent(boolean showSid, Locale locale, Dashlet dashlet, * columns in * @throws PersistenceException */ - private void retrieveExtendedAttributes(Locale locale, Dashlet dashlet, List records, - Map extValues, List attrs) throws PersistenceException { + private void retrieveExtendedAttributes(Locale locale, List records, Map extValues, + List attrs) throws PersistenceException { if (attrs.isEmpty()) return; @@ -355,7 +353,7 @@ private void printField(String fieldName, Object value, PrintWriter writer) { writer.write(""); } - private void handleDocument(boolean showSid, Locale locale, Dashlet dashlet, Map dashletDictionary, + private void handleDocument(Locale locale, Dashlet dashlet, Map dashletDictionary, Automation automation, PrintWriter writer) throws PersistenceException { if (StringUtils.isNotEmpty(dashlet.getContent())) { String content = automation.evaluate(dashlet.getContent(), dashletDictionary); @@ -508,8 +506,8 @@ private List getExtendedAttrsNamesInDasheltColumns(Dashlet dashlet) { return attrs; } - private void handleNote(boolean showSid, Locale locale, Dashlet dashlet, Map dashletDictionary, - Automation automation, PrintWriter writer) { + private void handleNote(Dashlet dashlet, Map dashletDictionary, Automation automation, + PrintWriter writer) { if (StringUtils.isNotEmpty(dashlet.getContent())) { String content = automation.evaluate(dashlet.getContent(), dashletDictionary); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/dbinit/PluginDbInit.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/dbinit/PluginDbInit.java index 38dde7e96..2dd21fa5f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/dbinit/PluginDbInit.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/dbinit/PluginDbInit.java @@ -35,7 +35,7 @@ public void init() throws SQLException { public void init(String[] ids) throws SQLException { log.info("Start database initialization"); - log.info("Database engine is " + getDbms()); + log.info("Database engine is {}", getDbms()); try { // Acquire the 'DbInit' extensions of the core plugin @@ -78,7 +78,6 @@ else if (position1 > position2) } execute(); } catch (Exception e) { - log.error(e.getMessage(), e); throw new SQLException(e.getMessage()); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DigestProcessor.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DigestProcessor.java index 28fb6ed36..66cba3a6f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DigestProcessor.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DigestProcessor.java @@ -71,20 +71,7 @@ protected void runTask() throws TaskException { List ids = documentDao.findIdsByWhere(PersistentObjectDAO.ENTITY + ".docRef is null and " + PersistentObjectDAO.ENTITY + ".digest is null and deleted = 0", null, max); for (Long id : ids) { - try { - log.debug("Processing document {}", id); - - Document doc = documentDao.findById(id); - documentDao.updateDigest(doc); - - log.debug("Processed document {}", id); - processed++; - } catch (Exception e) { - log.error(e.getMessage(), e); - errors++; - } finally { - next(); - } + processDocument(id); if (interruptRequested) return; } @@ -97,6 +84,23 @@ protected void runTask() throws TaskException { } } + private void processDocument(Long id) { + try { + log.debug("Processing document {}", id); + + Document doc = documentDao.findById(id); + documentDao.updateDigest(doc); + + log.debug("Processed document {}", id); + processed++; + } catch (Exception e) { + log.error(e.getMessage(), e); + errors++; + } finally { + next(); + } + } + @Override protected String prepareReport(Locale locale) { StringBuilder sb = new StringBuilder(); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentComparator.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentComparator.java index 24a6b1759..49fb4c464 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentComparator.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentComparator.java @@ -16,6 +16,9 @@ */ public abstract class DocumentComparator implements Comparator { + private DocumentComparator() { + }; + private static DocumentComparator ID_SORT = new DocumentComparator() { @Override public int compare(AbstractDocument d1, AbstractDocument d2) { @@ -100,9 +103,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { String val2 = d2.getComment(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.compareTo(val2); @@ -116,9 +119,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { String val2 = d2.getComment(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.toLowerCase().compareTo(val2.toLowerCase()); @@ -132,9 +135,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { Date val2 = d2.getStartPublishing(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.compareTo(val2); @@ -148,9 +151,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { Date val2 = d2.getStopPublishing(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.compareTo(val2); @@ -164,9 +167,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { String val2 = d2.getWorkflowStatus(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.compareTo(val2); @@ -180,9 +183,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { String val2 = d2.getWorkflowStatus(); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else return val1.toLowerCase().compareTo(val2.toLowerCase()); @@ -232,9 +235,9 @@ public int compare(AbstractDocument d1, AbstractDocument d2) { Comparable val2 = (Comparable) d2.getValue(attribute); if (val1 == null && val2 == null) return 0; - else if (val1 == null && val2 != null) + else if (val1 == null) return -1; - else if (val1 != null && val2 == null) + else if (val2 == null) return 1; else { if (val1 instanceof String && !caseSensitive) @@ -359,4 +362,4 @@ public static Comparator getComparator(final DocumentComparato return 0; }; } -} +} \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentManagerImpl.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentManagerImpl.java index 4f5c98210..0bbef62ec 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentManagerImpl.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/DocumentManagerImpl.java @@ -308,8 +308,6 @@ public void checkin(long docId, File file, String filename, boolean release, Abs try { storeFile(document, file); } catch (IOException ioe) { - log.error("Cannot save the new version {} into the storage", document, ioe); - document.copyAttributes(oldDocument); document.setOcrd(oldDocument.getOcrd()); document.setOcrTemplateId(oldDocument.getOcrTemplateId()); @@ -322,7 +320,8 @@ public void checkin(long docId, File file, String filename, boolean release, Abs document.setSigned(oldDocument.getSigned()); document.setComment(oldDocument.getComment()); documentDAO.store(document); - throw new PersistenceException(ioe.getMessage()); + throw new PersistenceException( + String.format("Cannot save the new version %s into the storage", document), ioe); } version.setFileSize(document.getFileSize()); @@ -429,9 +428,7 @@ public void deleteFromIndex(Document doc) { long docId = doc.getId(); // Physically remove the document from full-text index - if (doc != null) { - indexer.deleteHit(docId); - } + indexer.deleteHit(docId); doc.setIndexed(AbstractDocument.INDEX_TO_INDEX); documentDAO.store(doc); @@ -452,7 +449,7 @@ public String parseDocument(Document doc, String fileVersion) throws ParseExcept try { doc = documentDAO.findById(docref); if (doc == null) - throw new ParseException(String.format("Unexisting referenced document {}", docref)); + throw new ParseException(String.format("Unexisting referenced document %s", docref)); } catch (ParseException pe) { throw pe; } catch (PersistenceException e) { @@ -465,10 +462,10 @@ public String parseDocument(Document doc, String fileVersion) throws ParseExcept String resource = storer.getResourceName(doc, fileVersion, null); Parser parser = ParserFactory.getParser(doc.getFileName()); - log.debug("Using parser {} to parse document {}", parser.getClass().getName(), doc.getId()); - // and gets some fields if (parser != null) { + log.debug("Using parser {} to parse document {}", parser.getClass().getName(), doc.getId()); + TenantDAO tDao = (TenantDAO) Context.get().getBean(TenantDAO.class); try { content = parser.parse(storer.getStream(doc.getId(), resource), doc.getFileName(), null, locale, @@ -643,7 +640,7 @@ private synchronized void synchronizedUpdate(Document document, Document docVO, documentDAO.store(document, transaction); } - storeVersionAsync(version); + versionDAO.store(version); markAliasesToIndex(document.getId()); } else { @@ -662,10 +659,8 @@ private DocumentHistory checkDocumentRenamed(Document document, Document docVO, } private void setFileName(Document document, Document docVO) { - if (StringUtils.isNotEmpty(docVO.getFileName())) { - if (!document.getFileName().equals(docVO.getFileName())) { - document.setFileName(docVO.getFileName()); - } + if (StringUtils.isNotEmpty(docVO.getFileName()) && !document.getFileName().equals(docVO.getFileName())) { + document.setFileName(docVO.getFileName()); } } @@ -818,23 +813,21 @@ public Document create(File file, Document docVO, DocumentHistory transaction) t if (docVO.getTemplate() == null && docVO.getTemplateId() != null) docVO.setTemplate(templateDAO.findById(docVO.getTemplateId())); - if (file != null) - transaction.setFile(file.getAbsolutePath()); + transaction.setFile(file.getAbsolutePath()); // Create the gridRecord transaction.setEvent(DocumentEvent.STORED.toString()); documentDAO.store(docVO, transaction); /* store the document into filesystem */ - if (file != null) - try { - storeFile(docVO, file); - } catch (Exception e) { - String message = String.format("Unable to store the file of document %d", docVO.getId()); - log.error(message); - documentDAO.delete(docVO.getId()); - throw new PersistenceException(message, e); - } + try { + storeFile(docVO, file); + } catch (Exception e) { + String message = String.format("Unable to store the file of document %d", docVO.getId()); + log.error(message); + documentDAO.delete(docVO.getId()); + throw new PersistenceException(message, e); + } // The document record has been written, now store the initial // version (default 1.0) @@ -867,22 +860,23 @@ void storeVersionAsync(Version version) { int tests = 0; while (count == 0 && tests < 100) { count = documentDAO.queryForInt(documentWriteCheckQuery); - try { - Thread.sleep(1000L); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - } + Thread.sleep(1000L); tests++; } - if (log.isDebugEnabled() && count > 0) - log.debug("Record of document {} has been written", version.getDocId()); + if (count > 0) { + if (log.isDebugEnabled()) + log.debug("Record of document {} has been written", version.getDocId()); + + versionDAO.store(version); - versionDAO.store(version); - if (log.isDebugEnabled()) - log.debug("Stored version {} of document {}", version.getVersion(), version.getDocId()); + if (log.isDebugEnabled()) + log.debug("Stored version {} of document {}", version.getVersion(), version.getDocId()); + } } catch (PersistenceException ex) { log.error(ex.getMessage(), ex); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); } }, "VersionSave", 100L); } @@ -938,9 +932,10 @@ private void setAtributesForCreation(File file, Document docVO, DocumentHistory private void countPages(File file, Document doc) { try { Parser parser = ParserFactory.getParser(doc.getFileName()); - log.debug("Using parser {} to count pages of document {}", parser.getClass().getName(), doc); - if (parser != null) + if (parser != null) { + log.debug("Using parser {} to count pages of document {}", parser.getClass().getName(), doc); doc.setPages(parser.countPages(file, doc.getFileName())); + } } catch (Exception e) { log.warn("Cannot count pages of document {}", doc, e); } @@ -950,8 +945,8 @@ private void countPages(File file, Document doc) { public int countPages(Document doc) { try { Parser parser = ParserFactory.getParser(doc.getFileName()); - Storer storer = (Storer) Context.get().getBean(Storer.class); - return parser.countPages(storer.getStream(doc.getId(), storer.getResourceName(doc, null, null)), + Storer strt = (Storer) Context.get().getBean(Storer.class); + return parser.countPages(strt.getStream(doc.getId(), strt.getResourceName(doc, null, null)), doc.getFileName()); } catch (Exception e) { log.warn("Cannot count pages of document {}", doc, e); @@ -1123,7 +1118,6 @@ public Document replaceAlias(long aliasId, DocumentHistory transaction) throws P try { return copyToFolder(originalDoc, folder, new DocumentHistory(transaction)); } catch (IOException e) { - log.error(e.getMessage(), e); throw new PersistenceException(e); } } @@ -1184,7 +1178,6 @@ public Document createAlias(Document doc, Folder folder, String aliasType, Docum return alias; } catch (Exception e) { - log.error(e.getMessage(), e); throw new PersistenceException(e); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/Tag.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/Tag.java index f89691029..582283d19 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/Tag.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/Tag.java @@ -14,7 +14,7 @@ public class Tag implements Comparable, Serializable { private static final long serialVersionUID = 1L; - private String tag; + private String tagWord; private long tenantId = Tenant.DEFAULT_ID; @@ -24,23 +24,23 @@ public Tag() { public Tag(long tenantId, String tag) { this.tenantId = tenantId; - this.tag = tag; + this.tagWord = tag; } @Override public int compareTo(Tag o) { - int comp = this.tag.compareTo(o.tag); + int comp = this.tagWord.compareTo(o.tagWord); if (comp != 0) return comp; return Long.compare(this.tenantId, o.tenantId); } public String getTag() { - return tag; + return tagWord; } public void setTag(String tag) { - this.tag = tag; + this.tagWord = tag; } public long getTenantId() { @@ -53,18 +53,18 @@ public void setTenantId(long tenantId) { @Override public String toString() { - if (tag == null) + if (tagWord == null) return ""; else - return tag.toString(); + return tagWord.toString(); } @Override public int hashCode() { - if (tag == null) + if (tagWord == null) return 0; else - return (tag + tenantId).hashCode(); + return (tagWord + tenantId).hashCode(); } @Override @@ -76,6 +76,6 @@ public boolean equals(Object o) { return false; Tag other = (Tag) o; - return other.tenantId == this.tenantId && this.tag != null && this.tag.equals(other.tag); + return other.tenantId == this.tenantId && this.tagWord != null && this.tagWord.equals(other.tagWord); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentDAO.java index f487e4a98..aa4f90bfe 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentDAO.java @@ -750,7 +750,6 @@ public List findArchivedByFolder(long folderId) throws PersistenceExce @Override public List findLinkedDocuments(long docId, String linkType, Integer direction) throws PersistenceException { - List coll = new ArrayList<>(); StringBuilder query = new StringBuilder(""); if (direction == null) query.append( @@ -762,8 +761,10 @@ else if (direction.intValue() == 2) @SuppressWarnings("unchecked") List ids = queryForList(query.toString(), linkType != null ? new Object[] { docId } : new Object[] { docId, docId }, Long.class, null); - coll = findByWhere(ENTITY + ".id in (" + ids.stream().map(id -> id.toString()).collect(Collectors.joining(",")) - + ") and not " + ENTITY + STATUS + AbstractDocument.DOC_ARCHIVED, null, null); + List coll = findByWhere( + ENTITY + ".id in (" + ids.stream().map(id -> id.toString()).collect(Collectors.joining(",")) + + ") and not " + ENTITY + STATUS + AbstractDocument.DOC_ARCHIVED, + null, null); return coll; } @@ -963,7 +964,7 @@ private void saveDocumentHistory(Document doc, DocumentHistory transaction, Map< EventCollector.get().newEvent(transaction); } catch (PersistenceException e) { - if (transaction != null && StringUtils.isNotEmpty(transaction.getSessionId())) { + if (StringUtils.isNotEmpty(transaction.getSessionId())) { Session session = SessionManager.get().get(transaction.getSessionId()); session.logError(e.getMessage()); } @@ -1241,9 +1242,7 @@ public TagCloud mapRow(ResultSet rs, int arg1) throws SQLException { @Override public List getTagCloud(String sid) throws PersistenceException { Session session = SessionManager.get().get(sid); - ContextProperties config = Context.get().getProperties(); - - int maxTags = config.getInt(session.getTenantName() + ".tagcloud.maxtags", 30); + int maxTags = Context.get().getProperties().getInt(session.getTenantName() + ".tagcloud.maxtags", 30); return getTagCloud(session.getTenantId(), maxTags); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentNoteDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentNoteDAO.java index 05e2a9027..5ecbaecb6 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentNoteDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentNoteDAO.java @@ -30,6 +30,7 @@ public class HibernateDocumentNoteDAO extends HibernatePersistentObjectDAO implements DocumentNoteDAO { private static final String DOC_ID_DOC_ID_AND = ".docId = :docId and "; + private static final String DOC_ID = "docId"; public HibernateDocumentNoteDAO() { @@ -55,7 +56,7 @@ public void store(DocumentNote note, DocumentHistory transaction) throws Persist documentDao.saveDocumentHistory(doc, transaction); } } catch (Exception e) { - if (transaction != null && StringUtils.isNotEmpty(transaction.getSessionId())) { + if (StringUtils.isNotEmpty(transaction.getSessionId())) { Session session = SessionManager.get().get(transaction.getSessionId()); session.logError(e.getMessage()); } @@ -84,22 +85,21 @@ public List findByDocIdAndTypes(long docId, String fileVersion, Co params.put(DOC_ID, docId); params.put("types", types); - return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY + ".type in (:types)", - params, null, null); + return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY + ".type in (:types)", params, null, null); } else if (types == null || types.isEmpty()) { Map params = new HashMap<>(); params.put(DOC_ID, docId); params.put("fileVersion", fileVersion); - return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY + ".fileVersion = :fileVersion", - params, null, null); + return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY + ".fileVersion = :fileVersion", params, null, + null); } else { Map params = new HashMap<>(); params.put(DOC_ID, docId); params.put("fileVersion", fileVersion); params.put("types", types); - return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY - + ".fileVersion = :fileVersion and " + ENTITY + ".type in (:types)", params, null, null); + return findByWhere(ENTITY + DOC_ID_DOC_ID_AND + ENTITY + ".fileVersion = :fileVersion and " + ENTITY + + ".type in (:types)", params, null, null); } } catch (PersistenceException e) { log.error(e.getMessage(), e); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/thumbnail/AbstractThumbnailBuilder.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/thumbnail/AbstractThumbnailBuilder.java index 4034a464f..5a356d1f9 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/thumbnail/AbstractThumbnailBuilder.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/thumbnail/AbstractThumbnailBuilder.java @@ -12,4 +12,7 @@ */ public abstract class AbstractThumbnailBuilder implements ThumbnailBuilder { protected static Logger log = LoggerFactory.getLogger(AbstractThumbnailBuilder.class); + + protected AbstractThumbnailBuilder() { + } } \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/Folder.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/Folder.java index b2f11b653..04fedee2c 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/Folder.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/Folder.java @@ -176,8 +176,8 @@ public Folder(Folder source) { setAttributes(new HashMap<>()); try { - for (String name : source.getAttributes().keySet()) { - getAttributes().put(name, source.getAttributes().get(name)); + for (String attName : source.getAttributes().keySet()) { + getAttributes().put(attName, source.getAttributes().get(attName)); } } catch (LazyInitializationException x) { // may happen do nothing diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderListenerManager.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderListenerManager.java index 2811ca7f2..c3d3d769b 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderListenerManager.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderListenerManager.java @@ -64,8 +64,8 @@ else if (position1 > position2) throw new ClassNotFoundException( "The specified listener " + className + " doesn't implement FolderListener interface"); listeners.add((FolderListener) listener); - log.info("Added new folder listener " + className + " position " - + ext.getParameter(POSITION).valueAsString()); + log.info("Added new folder listener {} position {}", className, + ext.getParameter(POSITION).valueAsString()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { log.error(e.getMessage()); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java index 2fe476b1a..b18babe48 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java @@ -542,8 +542,6 @@ public boolean hasWriteAccess(Folder folder, long userId) throws PersistenceExce @SuppressWarnings("unchecked") @Override public List findByGroupId(long groupId) throws PersistenceException { - List coll = new ArrayList<>(); - // The administrators can see all folders if (groupId == Group.GROUPID_ADMIN) return findAll(); @@ -555,7 +553,7 @@ public List findByGroupId(long groupId) throws PersistenceException { query.append(LEFT_JOIN + ENTITY + FOLDER_GROUPS_AS_GROUP); query.append(WHERE + ENTITY + ".deleted=0 and _group.groupId =" + groupId); - coll = findByQuery(query.toString(), (Map) null, null); + List coll = findByQuery(query.toString(), (Map) null, null); /* * Now search for all other folders that references the previous ones @@ -1620,11 +1618,11 @@ private Folder internalCopy(Folder source, Folder target, String newName, boolea private Folder internatlCopyValidation(Folder source, Folder target, String securityOption, FolderHistory transaction) throws PersistenceException { - if(!(securityOption == null || "inherit".equals(securityOption) || REPLICATE.equals(securityOption))) - throw new IllegalArgumentException("Invalid security option "+securityOption); - if(source==null) + if (!(securityOption == null || "inherit".equals(securityOption) || REPLICATE.equals(securityOption))) + throw new IllegalArgumentException("Invalid security option " + securityOption); + if (source == null) throw new IllegalArgumentException("Source folder cannot be null"); - if(target==null) + if (target == null) throw new IllegalArgumentException("Target folder cannot be null"); if (transaction == null) throw new IllegalArgumentException("transaction cannot be null"); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/PathCalculator.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/PathCalculator.java index a7d6cc110..103a57702 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/PathCalculator.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/folder/PathCalculator.java @@ -58,18 +58,9 @@ protected void runTask() throws TaskException { if (!ids.isEmpty()) { for (Long id : ids) { - try { - String path = folderDao.computePath(id); - folderDao.jdbcUpdate("update ld_folder set ld_path='" + path + "' where ld_id=" + id); - processed++; - if (interruptRequested) - break; - } catch (Exception t) { - log.error("Error processing folder {}: {}", id, t.getMessage(), t); - errors++; - } finally { - next(); - } + processFolder(id); + if (interruptRequested) + break; } } } catch (PersistenceException e) { @@ -81,6 +72,19 @@ protected void runTask() throws TaskException { } } + private void processFolder(Long id) { + try { + String path = folderDao.computePath(id); + folderDao.jdbcUpdate("update ld_folder set ld_path='" + path + "' where ld_id=" + id); + processed++; + } catch (Exception t) { + log.error("Error processing folder {}: {}", id, t.getMessage(), t); + errors++; + } finally { + next(); + } + } + public FolderDAO getFolderDao() { return folderDao; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/DateBean.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/DateBean.java index 7e5fae615..7f348d429 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/DateBean.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/DateBean.java @@ -72,11 +72,10 @@ public static String toCompactString(Date date) { * * @param date string containing the date to be converted * @param dateFormat format of the date - * @param lang from which language it should be converted * * @return a string containing the converted date */ - public static String toCompactString(String date, String dateFormat, String lang) { + public static String toCompactString(String date, String dateFormat) { if ((date != null) && !date.equals("")) { return convertDate(dateFormat, YYYY_MMDD_HMMSS, date); } else { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/Language.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/Language.java index e8d9b4c21..7b03c91c2 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/Language.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/Language.java @@ -66,13 +66,13 @@ void loadStopwords() { try { Set swSet = new HashSet<>(); String stopwordsResource = "/stopwords/stopwords_" + getLocale().toString() + ".txt"; - log.debug("Loading stopwords from: " + stopwordsResource); + log.debug("Loading stopwords from: {}", stopwordsResource); InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(stopwordsResource); if (is == null) is = getClass().getResourceAsStream(stopwordsResource); if (is == null) { - log.warn("No stopwords found for locale " + getLocale().toString()); + log.warn("No stopwords found for locale {}", getLocale()); } else { InputStreamReader isr = new InputStreamReader(is, "UTF-8"); BufferedReader br = new BufferedReader(isr); @@ -131,7 +131,7 @@ private void initAnalyzer() { try { aClass = Class.forName(analyzerClass); } catch (Exception t) { - log.error(analyzerClass + " not found"); + log.error("{} not found", analyzerClass); } // Try to use constructor (Set stopwords) diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/LanguageManager.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/LanguageManager.java index ad91de993..e745fa366 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/LanguageManager.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/i18n/LanguageManager.java @@ -56,7 +56,7 @@ public void init() { for (Extension ext : extensions) { String language = ext.getParameter("locale").valueAsString(); String analyzer = ext.getParameter("analyzer").valueAsString(); - log.debug("analyzer = " + analyzer); + log.debug("analyzer = {}", analyzer); try { Locale locale = LocaleUtil.toLocale(language); Language lang = new Language(locale); @@ -68,7 +68,7 @@ public void init() { + lang.getLocale().getDisplayName(Locale.ENGLISH) + "Analyzer"); } languages.put(locale, lang); - log.info("Added new Language: " + language); + log.info("Added new Language: {}", language); } catch (Exception e) { log.error(e.getMessage()); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageDeskew.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageDeskew.java index db46d63d2..ddd4cbd7c 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageDeskew.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageDeskew.java @@ -93,10 +93,10 @@ public double getSkewAngle() { sum += hl[i].alpha; count++; } - if (count > 0) - return (sum / count); + if (count > 0) + return (sum / count); } - + return 0.0d; } @@ -147,14 +147,11 @@ private void calc() { for (int y = hMin; y < hMax; y++) { for (int x = 1; x < (this.image.getWidth() - 2); x++) { // only lower edges are considered - if (ImageUtil.isBlack(this.image, x, y)) { - if (!ImageUtil.isBlack(this.image, x, y + 1)) { - calc(x, y); - } + if (ImageUtil.isBlack(this.image, x, y) && !ImageUtil.isBlack(this.image, x, y + 1)) { + calc(x, y); } } } - } // calculate all lines through the point (x,y) diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageUtil.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageUtil.java index 90ed262d3..de639ad6d 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageUtil.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/imaging/ImageUtil.java @@ -48,6 +48,9 @@ public class ImageUtil { protected static Logger log = LoggerFactory.getLogger(ImageUtil.class); + private ImageUtil() { + } + /** * Saves an image into a given file in an image format * @@ -177,11 +180,9 @@ private static int getVisibleRight(BufferedImage srcImage) { for (int x = 0; x < srcImage.getWidth(); x++) { for (int y = 1; y < srcImage.getHeight(); y++) { Color pixelColor = new Color(srcImage.getRGB(x, y)); - if (!pixelColor.equals(Color.WHITE)) { - if (x > right) { + if (!pixelColor.equals(Color.WHITE) && x > right) { right = x; break; - } } } } @@ -193,11 +194,9 @@ private static int getVisibleLeft(BufferedImage srcImage) { for (int x = srcImage.getWidth() - 1; x > 0; x--) { for (int y = 1; y < srcImage.getHeight(); y++) { Color pixelColor = new Color(srcImage.getRGB(x, y)); - if (!pixelColor.equals(Color.WHITE)) { - if (x < left) { + if (!pixelColor.equals(Color.WHITE) && x < left) { left = x; break; - } } } } @@ -209,11 +208,9 @@ private static int getVisibleBottom(BufferedImage srcImage) { for (int x = 0; x < srcImage.getWidth(); x++) { for (int y = 0; y < srcImage.getHeight(); y++) { Color pixelColor = new Color(srcImage.getRGB(x, y)); - if (!pixelColor.equals(Color.WHITE)) { - if (y > bottom) { + if (!pixelColor.equals(Color.WHITE) && y > bottom) { bottom = y; break; - } } } } @@ -225,11 +222,9 @@ private static int getVisibleTop(BufferedImage srcImage) { for (int x = 1; x < srcImage.getWidth(); x++) { for (int y = srcImage.getHeight() - 1; y > 0; y--) { Color pixelColor = new Color(srcImage.getRGB(x, y)); - if (!pixelColor.equals(Color.WHITE)) { - if (y < top) { + if (!pixelColor.equals(Color.WHITE) && y < top) { top = y; break; - } } } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/job/JobManager.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/job/JobManager.java index 8c2dd150a..72636fb9e 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/job/JobManager.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/job/JobManager.java @@ -2,7 +2,6 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -193,15 +192,15 @@ public List getJobs(String group, Long tenantId) throws SchedulerExce List jobs = new ArrayList<>(); for (JobKey key : jobKeys) { JobDetail job = getJob(key.getName(), key.getGroup()); - if (tenantId == null || (tenantId != null && tenantId.equals(job.getJobDataMap().get(TENANT_ID)))) + if (tenantId == null || tenantId.equals(job.getJobDataMap().get(TENANT_ID))) jobs.add(job); } jobs.sort((JobDetail o1, JobDetail o2) -> { - int cmp = o1.getKey().getGroup().compareTo(o2.getKey().getGroup()); - if (cmp == 0) - cmp = o1.getKey().getName().compareTo(o2.getKey().getName()); - return cmp; + int cmp = o1.getKey().getGroup().compareTo(o2.getKey().getGroup()); + if (cmp == 0) + cmp = o1.getKey().getName().compareTo(o2.getKey().getName()); + return cmp; }); return jobs; } @@ -250,15 +249,15 @@ public List getTriggers(String group, Long tenantId) throws SchedulerEx List triggers = new ArrayList<>(); for (TriggerKey key : triggerKeys) { Trigger trigger = getTrigger(key.getName(), key.getGroup()); - if (tenantId == null || (tenantId != null && tenantId.equals(trigger.getJobDataMap().get(TENANT_ID)))) + if (tenantId == null || tenantId.equals(trigger.getJobDataMap().get(TENANT_ID))) triggers.add(trigger); } triggers.sort((Trigger o1, Trigger o2) -> { - int cmp = o1.getKey().getGroup().compareTo(o2.getKey().getGroup()); - if (cmp == 0) - cmp = o1.getKey().getName().compareTo(o2.getKey().getName()); - return cmp; + int cmp = o1.getKey().getGroup().compareTo(o2.getKey().getGroup()); + if (cmp == 0) + cmp = o1.getKey().getName().compareTo(o2.getKey().getName()); + return cmp; }); return triggers; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/ExtensibleObject.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/ExtensibleObject.java index 553121128..778d8bed4 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/ExtensibleObject.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/ExtensibleObject.java @@ -187,7 +187,7 @@ public List setValues(String name, Object[] values) { Attribute master = setValue(name, values[0]); attrs.add(master); - if (values != null && values.length > 1) { + if (values.length > 1) { master.setMultiple(1); NumberFormat nf = new DecimalFormat("0000"); for (int i = 1; i < values.length; i++) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/initialization/Initializer.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/initialization/Initializer.java index e9aaf0fda..6bb5332c9 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/initialization/Initializer.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/metadata/initialization/Initializer.java @@ -56,24 +56,18 @@ public void initialize(ExtensibleObject object, Template template, History trans template = initializeAttributes(template); - try { - // We access the collection as is without initializing the bean - // because that would lead to hibernate errors - for (String attributeName : template.getAttributeNames()) { - try { - Attribute attribute = object.getAttribute(attributeName); - Attribute templateAttribute = template.getAttribute(attributeName); - if (attribute != null && templateAttribute != null) - if (attribute.getValue() == null - && StringUtils.isNotEmpty(templateAttribute.getInitialization())) { - executeInitialization(object, transaction, attributeName, attribute, templateAttribute); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } + // We access the collection as is without initializing the bean + // because that would lead to hibernate errors + for (String attributeName : template.getAttributeNames()) { + try { + Attribute attribute = object.getAttribute(attributeName); + Attribute templateAttribute = template.getAttribute(attributeName); + if (attribute != null && templateAttribute != null && attribute.getValue() == null + && StringUtils.isNotEmpty(templateAttribute.getInitialization())) + executeInitialization(object, transaction, attributeName, attribute, templateAttribute); + } catch (Exception e) { + log.error(e.getMessage(), e); } - } catch (Exception e) { - log.error(e.getMessage(), e); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/AbstractParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/AbstractParser.java index e1bdfa3a5..7a44dba71 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/AbstractParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/AbstractParser.java @@ -96,11 +96,8 @@ private void parseInNewThread(final InputStream input, String filename, String e } catch (InterruptedException ie) { log.warn("Interrupted parse"); Thread.currentThread().interrupt(); - } catch (Throwable e) { - if (e instanceof ParseException) - throw (ParseException) e; - else - log.warn(e.getMessage(), e); + } catch (Exception e) { + log.warn(e.getMessage(), e); } if (!"completed".equals(ret)) throw new ParseException(ret); @@ -114,11 +111,10 @@ private void parseInCurrentThread(final InputStream input, String filename, Stri String fileVersion, StringBuilder content, Locale locale, String tenant) throws ParseException { try { internalParse(input, filename, encoding, locale, tenant, document, fileVersion, content); + } catch (ParseException pe) { + throw pe; } catch (Exception e) { - if (e instanceof ParseException) - throw (ParseException) e; - else - throw new ParseException(e); + throw new ParseException(e); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/CatchAllParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/CatchAllParser.java index 08cf82cb5..566466c07 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/CatchAllParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/CatchAllParser.java @@ -26,14 +26,14 @@ public void internalParse(InputStream input, String filename, String encoding, L if (document == null) parse1(input, filename, encoding, locale, tenant, content); else - parse2(input, filename, encoding, locale, tenant, document, fileVersion, content); + parse2(filename, encoding, locale, tenant, document, fileVersion, content); } /** * Parses with document specification */ - private void parse2(InputStream input, String filename, String encoding, Locale locale, String tenant, - Document document, String fileVersion, StringBuilder content) { + private void parse2(String filename, String encoding, Locale locale, String tenant, Document document, + String fileVersion, StringBuilder content) { try { FormatConverterManager manager = (FormatConverterManager) Context.get() diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/DOCParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/DOCParser.java index 5df404713..e37e03b9d 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/DOCParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/DOCParser.java @@ -37,19 +37,9 @@ public String parse(InputStream input, String filename, String encoding, Locale try (BufferedInputStream bis = new BufferedInputStream(input)) { bis.mark(Integer.MAX_VALUE); - String tmp = ""; - try (WordExtractor extractor = new WordExtractor(bis)) { - tmp = extractor.getText(); - } catch (Exception e) { - // Maybe the document to be parsed is not a Word file. - // Try to evaluate it as a RTF file. - } + String tmp = extractTextAsWord(bis); - try { - bis.reset(); - } catch (Exception e) { - // Noting to do - } + resetStream(bis); if (tmp.length() == 0) { // Try to evaluate it as a RTF file. @@ -66,6 +56,25 @@ public String parse(InputStream input, String filename, String encoding, Locale return ""; } + private void resetStream(BufferedInputStream bis) { + try { + bis.reset(); + } catch (Exception e) { + // Noting to do + } + } + + private String extractTextAsWord(BufferedInputStream bis) { + String tmp = ""; + try (WordExtractor extractor = new WordExtractor(bis)) { + tmp = extractor.getText(); + } catch (Exception e) { + // Maybe the document to be parsed is not a Word file. + // Try to evaluate it as a RTF file. + } + return tmp; + } + @Override public int countPages(InputStream input, String filename) { try (HWPFDocument wordDoc = new HWPFDocument(input)) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/EpubParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/EpubParser.java index 1e817443c..4ee133c02 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/EpubParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/EpubParser.java @@ -13,6 +13,7 @@ import com.github.mertakdut.BookSection; import com.github.mertakdut.Reader; import com.github.mertakdut.exception.OutOfPagesException; +import com.github.mertakdut.exception.ReadingException; import com.logicaldoc.core.document.Document; import com.logicaldoc.util.io.FileUtil; @@ -37,31 +38,34 @@ public void internalParse(InputStream input, String filename, String encoding, L Reader reader = new Reader(); reader.setIsIncludingTextContent(true); // Max string length for the current page - // reader.setMaxContentPerSection(10000); reader.setFullContent(tmpFile.getAbsolutePath()); - for (int i = 0; i < Integer.MAX_VALUE; i++) { - try { - BookSection bookSection = reader.readSection(i); - - // Excludes html tags - String sectionTextContent = bookSection.getSectionTextContent(); - if (StringUtils.isNotEmpty(sectionTextContent)) { - if (content.length() > 0) - content.append("\n"); - content.append(sectionTextContent); - } - } catch (OutOfPagesException t) { - break; - } - } - } catch (Throwable ex) { + extractSections(reader, content); + } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { FileUtil.strongDelete(tmpFile); } } + private void extractSections(Reader reader, StringBuilder content) throws ReadingException { + for (int sectionIndex = 0; sectionIndex < Integer.MAX_VALUE; sectionIndex++) { + try { + BookSection bookSection = reader.readSection(sectionIndex); + + // Excludes html tags + String sectionTextContent = bookSection.getSectionTextContent(); + if (StringUtils.isNotEmpty(sectionTextContent)) { + if (content.length() > 0) + content.append("\n"); + content.append(sectionTextContent); + } + } catch (OutOfPagesException t) { + break; + } + } + } + @Override public int countPages(InputStream input, String filename) { try (HSLFSlideShow pptDoc = new HSLFSlideShow(input)) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/OpenOfficeParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/OpenOfficeParser.java index a624d7d8d..62de4d6cb 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/OpenOfficeParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/OpenOfficeParser.java @@ -6,6 +6,7 @@ import java.io.StringReader; import java.util.Locale; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -85,7 +86,7 @@ public void characters(char[] ch, int start, int length) throws SAXException { } } -@Override + @Override public void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName) throws SAXException { appendChar = false; @@ -224,42 +225,44 @@ public int countPages(InputStream input, String filename) { @Override public int countPages(File input, String filename) { + + SAXParserFactory factory = SAXParserFactory.newInstance(); + XMLReader xmlReader; try { - SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setFeature("http://xml.org/sax/features/external-general-entities", false); factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setValidating(false); SAXParser saxParser = factory.newSAXParser(); - XMLReader xmlReader = saxParser.getXMLReader(); + xmlReader = saxParser.getXMLReader(); xmlReader.setFeature("http://xml.org/sax/features/validation", false); xmlReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - - int pages = 1; - ZipUtil zipUtil = new ZipUtil(); - try (InputStream is = zipUtil.getEntryStream(input, "meta.xml")) { - OpenOfficeMetadataHandler metadataHandler = new OpenOfficeMetadataHandler(); - xmlReader.setContentHandler(metadataHandler); - xmlReader.parse(new InputSource(is)); - if (metadataHandler.getPages() > pages) - pages = metadataHandler.getPages(); - } catch (Exception t) { - log.warn("Failed to extract OpenOffice meta.xml entry", t); - } - - try (InputStream is = zipUtil.getEntryStream(input, "content.xml")) { - OpenOfficePresentationMetadataHandler metadataHandler = new OpenOfficePresentationMetadataHandler(); - xmlReader.setContentHandler(metadataHandler); - xmlReader.parse(new InputSource(is)); - if (metadataHandler.getPages() > pages) - pages = metadataHandler.getPages(); - } catch (Exception t) { - log.warn("Failed to extract OpenOffice content.xml entry", t); - } - - return pages; - } catch (Exception e) { + } catch (ParserConfigurationException | SAXException e) { log.warn("Failed to extract OpenOffice metadata", e); return 1; } + + int pages = 1; + ZipUtil zipUtil = new ZipUtil(); + try (InputStream is = zipUtil.getEntryStream(input, "meta.xml")) { + OpenOfficeMetadataHandler metadataHandler = new OpenOfficeMetadataHandler(); + xmlReader.setContentHandler(metadataHandler); + xmlReader.parse(new InputSource(is)); + if (metadataHandler.getPages() > pages) + pages = metadataHandler.getPages(); + } catch (Exception t) { + log.warn("Failed to extract OpenOffice meta.xml entry", t); + } + + try (InputStream is = zipUtil.getEntryStream(input, "content.xml")) { + OpenOfficePresentationMetadataHandler metadataHandler = new OpenOfficePresentationMetadataHandler(); + xmlReader.setContentHandler(metadataHandler); + xmlReader.parse(new InputSource(is)); + if (metadataHandler.getPages() > pages) + pages = metadataHandler.getPages(); + } catch (Exception t) { + log.warn("Failed to extract OpenOffice content.xml entry", t); + } + + return pages; } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/PDFParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/PDFParser.java index 0437130b1..fc376e1ac 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/PDFParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/PDFParser.java @@ -44,14 +44,8 @@ public void internalParse(InputStream input, String filename, String encoding, L throw new IOException(CAN_NOT_GET_PDF_DOCUMENT_FOR_PARSING); } else { if (pdfDocument.isEncrypted()) { - try { - pdfDocument.close(); - pdfDocument = PDDocument.load(input, ""); - } catch (Exception e) { - log.error("Error: The document is encrypted."); - content.append("The document is encrypted"); - return; - } + pdfDocument.close(); + pdfDocument = PDDocument.load(input, ""); } if (pdfDocument == null) diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ParserFactory.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ParserFactory.java index 0cc7e8dcc..26fbbaf38 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ParserFactory.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ParserFactory.java @@ -47,6 +47,8 @@ public class ParserFactory { */ private static Map aliases = new HashMap<>(); + private ParserFactory() {} + /** * Registers all parsers from extension points */ diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/RarParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/RarParser.java index e31225d78..6d14bca86 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/RarParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/RarParser.java @@ -63,8 +63,7 @@ public void internalParse(InputStream input, String filename, String encoding, L } } } finally { - if (rarFile != null) - FileUtil.strongDelete(rarFile); + FileUtil.strongDelete(rarFile); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/SevenZipParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/SevenZipParser.java index ad2911391..18cf3c61a 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/SevenZipParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/SevenZipParser.java @@ -63,8 +63,7 @@ public void internalParse(InputStream input, String filename, String encoding, L } } } finally { - if (sevenFile != null) - FileUtil.strongDelete(sevenFile); + FileUtil.strongDelete(sevenFile); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TXTParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TXTParser.java index f295f199b..fa012fbbf 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TXTParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TXTParser.java @@ -35,28 +35,29 @@ public class TXTParser extends AbstractParser { public String parse(File file, String filename, String encoding, Locale locale, String tenant, Document document, String fileVersion) { try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis);) { - String enc = encoding; - if (StringUtils.isEmpty(enc)) { - // Determine the most probable encoding - try { - CharsetDetector cd = new CharsetDetector(); - cd.setText(bis); - CharsetMatch cm = cd.detect(); - if (cm != null) { - if (Charset.isSupported(cm.getName())) - enc = cm.getName(); - } - } catch (Throwable th) { - log.warn("Error during TXT fileNameCharset detection", th); - } - } - return parse(bis, filename, enc, locale, tenant, document, fileVersion); - } catch (Throwable ex) { + return parse(bis, filename, determineEncoding(bis, encoding), locale, tenant, document, fileVersion); + } catch (Exception ex) { log.warn("Failed to extract TXT text content", ex); } return ""; } + private String determineEncoding(BufferedInputStream bis, String probableEncoding) { + if (StringUtils.isEmpty(probableEncoding)) { + // Determine the most probable encoding + try { + CharsetDetector cd = new CharsetDetector(); + cd.setText(bis); + CharsetMatch cm = cd.detect(); + if (cm != null && Charset.isSupported(cm.getName())) + probableEncoding = cm.getName(); + } catch (Exception th) { + log.warn("Error during TXT fileNameCharset detection", th); + } + } + return probableEncoding; + } + @Override public void internalParse(InputStream input, String filename, String encoding, Locale locale, String tenant, Document document, String fileVersion, StringBuilder content) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TarParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TarParser.java index 6770ac0d7..97ed0b44a 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TarParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/TarParser.java @@ -50,7 +50,7 @@ public void internalParse(InputStream input, String filename, String encoding, L if (entryParser == null) throw new IOException(String.format("Unable to find a parser for %s", entryExtension)); - new TarUtil().extractEntry(tarFile, entry, uncompressedEntryFile); + new TarUtil().extractEntry(tarFile, uncompressedEntryFile); Document clone = new Document(document); clone.setFileName(uncompressedEntryFile.getName()); @@ -63,8 +63,7 @@ public void internalParse(InputStream input, String filename, String encoding, L } } } finally { - if (tarFile != null) - FileUtil.strongDelete(tarFile); + FileUtil.strongDelete(tarFile); } } @@ -105,7 +104,7 @@ public int countPages(File input, String filename) { if (entryParser == null) throw new IOException(String.format("Unable to find a parser for %s", entryExtension)); - new TarUtil().extractEntry(input, entry, uncompressedEntryFile); + new TarUtil().extractEntry(input, uncompressedEntryFile); return entryParser.countPages(uncompressedEntryFile, uncompressedEntryFile.getName()); } finally { if (uncompressedEntryFile != null) diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/XMLParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/XMLParser.java index 7350695d5..90a206c6a 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/XMLParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/XMLParser.java @@ -74,13 +74,7 @@ public void close() { } }); if (encoding != null) { - try { - Charset.forName(encoding); - source.setEncoding(encoding); - } catch (Exception e) { - log.warn("Unsupported encoding '{}', using default ({}) instead.", encoding, - System.getProperty("file.encoding")); - } + setEncoding(encoding, source); } reader.parse(source); @@ -89,4 +83,14 @@ public void close() { log.warn("Failed to extract XML text content", e); } } + + private void setEncoding(String encoding, InputSource source) { + try { + Charset.forName(encoding); + source.setEncoding(encoding); + } catch (Exception e) { + log.warn("Unsupported encoding '{}', using default ({}) instead.", encoding, + System.getProperty("file.encoding")); + } + } } \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ZipParser.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ZipParser.java index dd731c725..0294fcacf 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ZipParser.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/ZipParser.java @@ -111,8 +111,7 @@ private void internalParseZip(InputStream input, String encoding, Locale locale, } } } finally { - if (zipFile != null) - FileUtil.strongDelete(zipFile); + FileUtil.strongDelete(zipFile); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/StringExtractor.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/StringExtractor.java index 55602b8f7..d8d679845 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/StringExtractor.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/StringExtractor.java @@ -119,7 +119,6 @@ protected boolean isValidLine(String lineLowerCase) { protected boolean isTextCharacter(int charNumber) { return charNumber >= 32 && charNumber <= 126 || // readable ASCII // characters - // charNumber >= 128 && charNumber <= 168 || // letters with accents, // currency symbols, etc. charNumber == 9; // tab } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/WPStringExtractor.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/WPStringExtractor.java index 031e88711..795ec2945 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/WPStringExtractor.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/parser/wordperfect/WPStringExtractor.java @@ -3,60 +3,53 @@ import java.io.IOException; import java.io.InputStream; - /** - * A StringExtractor extension optimized for processing WordPerfect document streams. + * A StringExtractor extension optimized for processing WordPerfect document + * streams. * *

- * This class is made available as a utility class as other file formats may also use WordPerfect's file - * structure, e.g. Corel Presentations 3.0 files. + * This class is made available as a utility class as other file formats may + * also use WordPerfect's file structure, e.g. Corel Presentations 3.0 files. */ public class WPStringExtractor extends StringExtractor { private static final String[] EXACT_START_LINES = { "doc init", "tech init" }; - private static final String[] START_EXCLUDES = { "wpc", "monotype sorts", "section", "columns", - "aligned ", "standard", "default ", "biblio", "footnote", "gfootnote", "endnote", "heading", - "header for ", "underlined heading", "centered heading", "technical", "object #", - "microsoft word" }; + private static final String[] START_EXCLUDES = { "wpc", "monotype sorts", "section", "columns", "aligned ", + "standard", "default ", "biblio", "footnote", "gfootnote", "endnote", "heading", "header for ", + "underlined heading", "centered heading", "technical", "object #", "microsoft word" }; private static final String[] END_EXCLUDES = { "aligned paragraph numbers", "heading", "bullet list" - // " style", " roman", "laserJet", "bullet list", "defaults", "typestyle", "land", "landscape", "portrait" + // " style", " roman", "laserJet", "bullet list", "defaults", + // "typestyle", "land", "landscape", "portrait" }; - private static final String[] EXACT_EXCLUDES = { "nlus.", "usjp", "initialize technical style", - "document style", "pleading", "times", "and", "where", "left", "right", "over", "(k over", - "document", "header", "footer", "itemize", "page number", "pages", "body text", "word", - "sjablone", "d printer" }; + private static final String[] EXACT_EXCLUDES = { "nlus.", "usjp", "initialize technical style", "document style", + "pleading", "times", "and", "where", "left", "right", "over", "(k over", "document", "header", "footer", + "itemize", "page number", "pages", "body text", "word", "sjablone", "d printer" }; private static final String[] CONTAIN_EXCLUDES = { "left (", "right )", "right ]", "right par", "default paragraph", }; /** - * Wraps the specified InputStream in a WPFilterInputStream and passes it to the super class. + * Wraps the specified InputStream in a WPFilterInputStream and passes it to + * the super class. */ @Override public String extract(InputStream stream) throws IOException { WPFilterInputStream wpfis = new WPFilterInputStream(stream); String text = super.extract(wpfis); - //wpfis.closeExtraOut(); return text; } - - // overrides StringExtractor.isTextCharacter + @Override protected boolean isTextCharacter(int charNumber) { - + boolean xxx = super.isTextCharacter(charNumber) || charNumber >= 0xC0 && charNumber <= 0xFF - // accented ANSI character - || charNumber == 0x91 // backquote - || charNumber == 0x92; // quote; - - + || charNumber == 0x91 || charNumber == 0x92; return xxx; } - // overrides StringExtractor.isStartLine @Override protected boolean isStartLine(String lineLowerCase) { for (int i = 0; i < EXACT_START_LINES.length; i++) { @@ -67,7 +60,6 @@ protected boolean isStartLine(String lineLowerCase) { return false; } - // overrides StringExtractor.isValidLine @Override protected boolean isValidLine(String lineLowerCase) { for (int i = 0; i < EXACT_EXCLUDES.length; i++) { @@ -97,4 +89,4 @@ protected boolean isValidLine(String lineLowerCase) { return super.isValidLine(lineLowerCase); } -} +} \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/FulltextSearch.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/FulltextSearch.java index e35fec825..f6474fb0e 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/FulltextSearch.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/FulltextSearch.java @@ -187,9 +187,8 @@ public void internalSearch() throws SearchException { hitsIdsCondition.append(")"); } - StringBuilder richQuery = new StringBuilder(); // Find real documents - richQuery = new StringBuilder( + StringBuilder richQuery = new StringBuilder( "select A.ld_id, A.ld_customid, A.ld_docref, A.ld_type, A.ld_version, A.ld_lastmodified, "); richQuery.append(" A.ld_date, A.ld_publisher, A.ld_creation, A.ld_creator, A.ld_filesize, A.ld_immutable, "); richQuery.append(" A.ld_indexed, A.ld_lockuserid, A.ld_filename, A.ld_status, A.ld_signed, A.ld_type, "); @@ -248,7 +247,7 @@ public void internalSearch() throws SearchException { richQuery.append(hitsIdsCondition.toString().replace("A.ld_id", "A.ld_docref")); } - log.debug("Execute query {}", richQuery.toString()); + log.debug("Execute query {}", richQuery); DocumentDAO dao = (DocumentDAO) Context.get().getBean(DocumentDAO.class); try { @@ -269,12 +268,11 @@ private Map buildHitsMap(FulltextSearchOptions opt, Hits results) { Map hitsMap = new HashMap<>(); while (results != null && results.hasNext()) { Hit hit = results.next(); - + // Skip a document if not in the filter set - if (opt.getFilterIds() != null && !opt.getFilterIds().isEmpty()) { - if (!opt.getFilterIds().contains(hit.getId())) - continue; - } + if (opt.getFilterIds() != null && !opt.getFilterIds().isEmpty() + && !opt.getFilterIds().contains(hit.getId())) + continue; hitsMap.put(hit.getId(), hit); } return hitsMap; @@ -366,15 +364,15 @@ private void appendFolderQueryFilter(FulltextSearchOptions opt, List fil throw new SearchException(e1.getMessage(), e1); } - StringBuilder foldersFilter=new StringBuilder(); + StringBuilder foldersFilter = new StringBuilder(); if (!accessibleFolderIds.isEmpty() && opt.getFolderId() != null) { for (Long id : accessibleFolderIds) { - if(foldersFilter.length() > 0) + if (foldersFilter.length() > 0) foldersFilter.append(" or "); foldersFilter.append(HitField.FOLDER_ID + ":" + (id < 0 ? "\\" : "") + id); } - - filters.add(" ("+foldersFilter.toString()+") "); + + filters.add(" (" + foldersFilter.toString() + ") "); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/Hit.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/Hit.java index 51f4340d5..8b74f061f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/Hit.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/Hit.java @@ -11,7 +11,7 @@ public class Hit extends Document implements Comparable { private static final long serialVersionUID = 1L; - + private int score; private String content; @@ -52,14 +52,10 @@ public int compareTo(Hit other) { return 0; if (other.score == this.score) { - try { - if (this.getFileName() != null) - return this.getFileName().compareToIgnoreCase(other.getFileName()); - else - return 0; - } catch (Exception t) { + if (this.getFileName() != null) + return this.getFileName().compareToIgnoreCase(other.getFileName()); + else return 0; - } } else return -1 * (Integer.valueOf(this.score).compareTo(Integer.valueOf(other.score))); } catch (Exception t) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/IndexerTask.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/IndexerTask.java index 36bfad857..cd3010997 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/IndexerTask.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/IndexerTask.java @@ -134,7 +134,7 @@ protected void runTask() throws TaskException { // Must take into account start and end of the transaction size += 2; - + // Mark all the documents as belonging to the current // transaction. This may require time assignTransition(docIds); @@ -156,9 +156,8 @@ protected void runTask() throws TaskException { List threads = new ArrayList<>(); // Prepare the threads and launch them - int i = 1; for (List partition : partitions) { - IndexerThread iThread = new IndexerThread(partition, i++); + IndexerThread iThread = new IndexerThread(partition); threads.add(iThread); executor.schedule(new FutureTask(iThread), 1, TimeUnit.SECONDS); log.debug("Launched the thread for documents {}", partition); @@ -290,9 +289,9 @@ else if ("smallestfirst".equals(sorting)) if (StringUtils.isNotEmpty(sortingCustom)) sorting = sortingCustom; - String where = " (" + PersistentObjectDAO.ENTITY + ".indexed = " + AbstractDocument.INDEX_TO_INDEX - + " or " + PersistentObjectDAO.ENTITY + ".indexed = " + AbstractDocument.INDEX_TO_INDEX_METADATA - + ") and not " + PersistentObjectDAO.ENTITY + ".status = " + AbstractDocument.DOC_ARCHIVED; + String where = " (" + PersistentObjectDAO.ENTITY + ".indexed = " + AbstractDocument.INDEX_TO_INDEX + " or " + + PersistentObjectDAO.ENTITY + ".indexed = " + AbstractDocument.INDEX_TO_INDEX_METADATA + ") and not " + + PersistentObjectDAO.ENTITY + ".status = " + AbstractDocument.DOC_ARCHIVED; return new String[] { where, sorting }; } @@ -361,7 +360,7 @@ class IndexerThread implements Callable { private int errors = 0; - IndexerThread(List docIds, int number) { + IndexerThread(List docIds) { this.docIds = docIds; } @@ -398,7 +397,7 @@ public Long call() throws Exception { long indexingDiff = TimeDiff.getTimeDifference(beforeIndexing, new Date(), TimeField.MILLISECOND); indexingTime += indexingDiff; - log.debug("Thread {}: Indexed document {} in {}ms", number, indexingDiff); + log.debug("Thread {}: Indexed document {} in {}ms", number, doc, indexingDiff); } indexed++; } catch (Exception e) { @@ -415,7 +414,7 @@ public Long call() throws Exception { } } - log.debug("Thread {} has completed"); + log.debug("Thread {} has completed", number); return indexingTime; } finally { completed = true; diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/StandardSearchEngine.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/StandardSearchEngine.java index 89b2cb712..6c1cbe685 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/StandardSearchEngine.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/StandardSearchEngine.java @@ -449,27 +449,28 @@ public synchronized void unlock() { } } - /* - * (non-Javadoc) - * - * @see com.logicaldoc.core.searchengine.SearchEngine#isLocked() - */ @Override public boolean isLocked() { - boolean result = false; + boolean locked = false; try { Directory directory = getIndexDataDirectory(); - try { - directory.obtainLock(IndexWriter.WRITE_LOCK_NAME).close(); - result = false; - } catch (LockObtainFailedException failed) { - result = true; - } + locked = !obtainLock(directory); } catch (Exception e) { log.warn("isLocked {}", e.getMessage(), e); } + return locked; + } + + private boolean obtainLock(Directory directory) throws IOException { + boolean result = false; + try { + directory.obtainLock(IndexWriter.WRITE_LOCK_NAME).close(); + result = true; + } catch (LockObtainFailedException failed) { + result = false; + } return result; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/TagSearch.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/TagSearch.java index 25c13cde4..eaf7c6ba1 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/TagSearch.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/TagSearch.java @@ -91,7 +91,7 @@ private void prepareExpression() throws PersistenceException { appendWhereClause(true, query); - log.info("executing tag search query = {}", query.toString()); + log.info("executing tag search query = {}", query); options.setExpression(query.toString()); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/folder/FolderSearch.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/folder/FolderSearch.java index 1435a96d7..2746635f1 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/folder/FolderSearch.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/folder/FolderSearch.java @@ -36,11 +36,17 @@ public class FolderSearch extends Search { private static final String EQUAL_PARAMETER = " = ?)"; + private static final String NOT = "(not "; + private static final String LIKE = " like '%"; + private static final String IS_NOT_NULL = " is not null "; + private static final String IS_NULL = " is null "; + private static final String LOWER = "lower("; + private static final String AND = " and "; @SuppressWarnings("unchecked") @@ -127,7 +133,7 @@ private Serializable[] prepareExpression() throws PersistenceException { options.setExpression(query.toString()); - log.info("executing query {}", query.toString()); + log.info("executing query {}", query); log.info("with parameters {}", params); return params.toArray(new Serializable[0]); @@ -142,7 +148,7 @@ private Serializable[] prepareExpression() throws PersistenceException { * @param params * @param query * - * PersistenceException error at data layer + * PersistenceException error at data layer */ private void appendWhereClause(boolean searchAliases, ArrayList params, StringBuilder query) throws PersistenceException { @@ -513,13 +519,11 @@ private void prepareExtendedAttributesJoins(StringBuilder query) { int counter = 0; if (((FolderSearchOptions) options).getCriteria() != null) for (FolderCriterion criterion : ((FolderSearchOptions) options).getCriteria()) { - if (criterion.isExtendedAttribute()) { - if (!criterion.isEmpty()) { - counter++; - query.append(", ld_folder_ext C" + counter); - if ("or".equals(options.getTopOperator())) - break; - } + if (criterion.isExtendedAttribute() && !criterion.isEmpty()) { + counter++; + query.append(", ld_folder_ext C" + counter); + if ("or".equals(options.getTopOperator())) + break; } } } @@ -547,13 +551,11 @@ private Collection retrieveAccessibleFolderIdsFromFolderCriterions(User us FolderDAO folderDAO = (FolderDAO) Context.get().getBean(FolderDAO.class); Collection ids = new HashSet<>(); for (FolderCriterion criterion : ((FolderSearchOptions) options).getCriteria()) { - if (criterion.getType() == FolderCriterion.TYPE_FOLDER) { - if (!criterion.isEmpty()) { - if (FolderCriterion.OPERATOR_INORSUBFOLDERS.equals(criterion.getOperator())) { - ids.addAll(folderDAO.findFolderIdByUserIdInPath(user.getId(), criterion.getLongValue())); - } else if (folderDAO.isReadEnabled(criterion.getLongValue(), user.getId())) { - ids.add(criterion.getLongValue()); - } + if (criterion.getType() == FolderCriterion.TYPE_FOLDER && !criterion.isEmpty()) { + if (FolderCriterion.OPERATOR_INORSUBFOLDERS.equals(criterion.getOperator())) { + ids.addAll(folderDAO.findFolderIdByUserIdInPath(user.getId(), criterion.getLongValue())); + } else if (folderDAO.isReadEnabled(criterion.getLongValue(), user.getId())) { + ids.add(criterion.getLongValue()); } } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/saved/SavedSearch.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/saved/SavedSearch.java index 6a78a5344..dea8f8c60 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/saved/SavedSearch.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/searchengine/saved/SavedSearch.java @@ -65,10 +65,10 @@ public void saveOptions(SearchOptions opt) throws IOException { public SearchOptions readOptions() throws IOException { try (XMLDecoder decoder = new XMLDecoder(new ByteArrayInputStream(getOptions().getBytes()))) { - SearchOptions options = (SearchOptions) decoder.readObject(); - options.setName(getName()); - options.setDescription(getDescription()); - return options; + SearchOptions searchOptions = (SearchOptions) decoder.readObject(); + searchOptions.setName(getName()); + searchOptions.setDescription(getDescription()); + return searchOptions; } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Client.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Client.java index aa8f9a26f..c59c66ec4 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Client.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Client.java @@ -52,7 +52,7 @@ public Client(String id, String address, String host) { try { this.geolocation = Geolocation.get(address); } catch (IOException e) { - log.debug("Geolocalization: " + e.getMessage(), address); + log.debug("Geolocalization: {} {}", e.getMessage(), address); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Device.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Device.java index b0035399d..176eea00f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Device.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Device.java @@ -89,15 +89,15 @@ public Device(HttpServletRequest request) { setDeviceId(getDeviceId(request)); setBrowser(agent.getBrowser().getName()); - if (agent != null) { - if (agent.getBrowserVersion() != null) - setBrowserVersion(agent.getBrowserVersion().getVersion()); - if (agent.getOperatingSystem() != null) { - setOperativeSystem(agent.getOperatingSystem().getName()); - if (agent.getOperatingSystem().getDeviceType() != null) - setType(agent.getOperatingSystem().getDeviceType().toString()); - } + + if (agent.getBrowserVersion() != null) + setBrowserVersion(agent.getBrowserVersion().getVersion()); + if (agent.getOperatingSystem() != null) { + setOperativeSystem(agent.getOperatingSystem().getName()); + if (agent.getOperatingSystem().getDeviceType() != null) + setType(agent.getOperatingSystem().getDeviceType().toString()); } + setIp(request.getRemoteAddr()); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Geolocation.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Geolocation.java index 8208d584c..0f14806c4 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Geolocation.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Geolocation.java @@ -39,7 +39,7 @@ */ public class Geolocation { - private static final String GEOLOCATION = "geolocation"; + private static final String CONST_GEOLOCATION = "geolocation"; private static Logger log = LoggerFactory.getLogger(Geolocation.class); @@ -114,7 +114,7 @@ private Geolocation geolocate(String ip) throws IOException { response.getCity().getName(), response.getPostal().getCode(), response.getLeastSpecificSubdivision().getName()); - log.debug("IP {} is located at {}", geo.toString()); + log.debug("IP {} is located at {}", ip, geo); return geo; } catch (GeoIp2Exception e) { @@ -165,7 +165,7 @@ public void syncDB(String key) throws IOException { if (result != HttpStatus.SC_OK) throw new IOException("HTTP error " + result); - gzFile = FileUtil.createTempFile(GEOLOCATION, ".tar.gz"); + gzFile = FileUtil.createTempFile(CONST_GEOLOCATION, ".tar.gz"); try (InputStream in = HttpUtil.getBodyStream(response); FileOutputStream fos = new FileOutputStream(gzFile); @@ -183,7 +183,7 @@ public void syncDB(String key) throws IOException { /* * Prepare a temporary folder and hunzip the downloaded file in it */ - tmpDir = FileUtil.createTempFile(GEOLOCATION, null); + tmpDir = FileUtil.createTempFile(CONST_GEOLOCATION, null); FileUtil.strongDelete(tmpDir); tmpDir.mkdir(); new ZipUtil().unGZipUnTar(gzFile, tmpDir); @@ -285,7 +285,7 @@ public String toString() { } private static File getDatabaseFile() { - File folder = PluginRegistry.getPluginResource("logicaldoc-core", GEOLOCATION); + File folder = PluginRegistry.getPluginResource("logicaldoc-core", CONST_GEOLOCATION); return new File(folder, "geolocation.db"); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/LoginThrottle.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/LoginThrottle.java index fa773d297..35b59bf4b 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/LoginThrottle.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/LoginThrottle.java @@ -33,6 +33,9 @@ public class LoginThrottle { protected static Logger log = LoggerFactory.getLogger(LoginThrottle.class); + private LoginThrottle() { + } + /** * Clears the failures for the given username and or password * @@ -169,7 +172,7 @@ private static void checkUsername(String username) throws UsernameBlockedExcepti } } } - + private static void deleteSequence(Sequence seq) { try { SequenceDAO sDao = (SequenceDAO) Context.get().getBean(SequenceDAO.class); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Menu.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Menu.java index 2692dddf3..c4f616179 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Menu.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Menu.java @@ -19,7 +19,7 @@ public class Menu extends PersistentObject implements Comparable

{ private static final long serialVersionUID = 1L; - + public static final long ROOT = 1; public static final long ADMINISTRATION = 2; @@ -45,13 +45,13 @@ public class Menu extends PersistentObject implements Comparable { public static final long VERSIONS = 1603; public static final long ALIASES = 1605; - + public static final long PREVIEW = 1609; - + public static final long RATING = 1610; public static final long PARAMETERS = 100; - + public static final long ADMIN_SESSIONS = 71; public static final long LOGS = 72; @@ -67,7 +67,7 @@ public class Menu extends PersistentObject implements Comparable { public static final long INTERFACE_DENSITY = 1535; public static final long CUSTOM_ACTIONS = 1300; - + public static final int TYPE_DEFAULT = 1; public static final int TYPE_CUSTOM_ACTION = 2; @@ -89,7 +89,7 @@ public class Menu extends PersistentObject implements Comparable { private int position = 1; private int enabled = 1; - + /** * The declared routine to execute */ @@ -102,6 +102,10 @@ public class Menu extends PersistentObject implements Comparable { private Set menuGroups = new HashSet<>(); + public Menu() { + super(); + } + @Override public long getId() { return id; diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Session.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Session.java index cdfc85e31..8e33ea515 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Session.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/Session.java @@ -233,12 +233,12 @@ private Session() { // Send an email alert to the user in case of new device if (newDevice && Context.get().getProperties().getBoolean(tenantName + ".alertnewdevice", true)) { - Map dictionary = new HashMap<>(); - dictionary.put("user", user); - dictionary.put("device", device); - dictionary.put("client", client); - dictionary.put("location", client.getGeolocation()); - dictionary.put("event", history); + Map dictionaryMap = new HashMap<>(); + dictionaryMap.put("user", user); + dictionaryMap.put("device", device); + dictionaryMap.put("client", client); + dictionaryMap.put("location", client.getGeolocation()); + dictionaryMap.put("event", history); EMail email = new EMail(); email.setTenantId(tenantId); @@ -251,7 +251,7 @@ private Session() { email.getRecipients().add(recipient); EMailSender sender = (EMailSender) Context.get().getBean(EMailSender.class); - sender.sendAsync(email, "newdevice", dictionary); + sender.sendAsync(email, "newdevice", dictionaryMap); } } catch (PersistenceException e) { @@ -360,9 +360,9 @@ public Log getLastError() { if (logs == null || logs.isEmpty()) return null; - for (Log log : logs) - if (ERROR.equals(log.getLevel())) - return log; + for (Log lg : logs) + if (ERROR.equals(lg.getLevel())) + return lg; return null; } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/User.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/User.java index bb1e96c63..ea3828c06 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/User.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/User.java @@ -211,7 +211,7 @@ public class User extends PersistentObject implements Serializable { private Set workingTimes = new HashSet<>(); private String timeZone; - + public int getType() { return type; } @@ -353,11 +353,9 @@ public void removeGroupMemberships(String source) { Iterator iter = getGroups().iterator(); while (iter.hasNext()) { Group grp = iter.next(); - if (!getUserGroupName().equals(grp.getName())) { - if (source == null || (source != null && source.equals(grp.getSource()))) { - iter.remove(); - getUserGroups().remove(new UserGroup(grp.getId())); - } + if (!getUserGroupName().equals(grp.getName()) && (source == null || source.equals(grp.getSource()))) { + iter.remove(); + getUserGroups().remove(new UserGroup(grp.getId())); } } } @@ -465,7 +463,6 @@ public void reset() { workingTimes = new HashSet<>(); } - @Override public String toString() { return getUsername(); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateDeviceDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateDeviceDAO.java index a6b0e6fcc..cd5f0afcf 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateDeviceDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateDeviceDAO.java @@ -114,7 +114,7 @@ public boolean isTrustedDevice(String username, HttpServletRequest request) { return false; Device requestDevice = new Device(request); - if (requestDevice == null || requestDevice.getDeviceId() == null) + if (requestDevice.getDeviceId() == null) return false; List trustedDevices = findTrustedDevices(user.getId()); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateGroupDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateGroupDAO.java index 6b536dc7c..76a3adad0 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateGroupDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateGroupDAO.java @@ -45,11 +45,9 @@ public void delete(long groupId, int code) throws PersistenceException { if (group.getName().equals("admin") || group.getName().equals("guest") || group.getName().equals("publisher")) throw new PersistenceException(String.format("Group %s cannot be deleted", group.getName())); - if (group != null) { - group.setName(group.getName() + "." + group.getId()); - group.setDeleted(code); - saveOrUpdate(group); - } + group.setName(group.getName() + "." + group.getId()); + group.setDeleted(code); + saveOrUpdate(group); } public boolean exists(String groupname, long tenantId) { @@ -205,7 +203,7 @@ public void initialize(Group group) { if (group == null) return; - if (group != null && group.getDeleted() == 0) + if (group.getDeleted() == 0) refresh(group); UserDAO uDao = (UserDAO) Context.get().getBean(UserDAO.class); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateMenuDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateMenuDAO.java index e27e84873..e132fccb5 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateMenuDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateMenuDAO.java @@ -115,11 +115,10 @@ public List findByUserId(long userId) { // Now collect all menus that references the policies of the // previously found menus - List tmp = new ArrayList<>(); query = new StringBuilder("select _menu from Menu _menu where _menu.securityRef in ("); query.append(coll.stream().map(m -> Long.toString(m.getId())).collect(Collectors.joining(","))); query.append(")"); - tmp = findByQuery(query.toString(), (Map) null, null); + List tmp = findByQuery(query.toString(), (Map) null, null); for (Menu menu : tmp) { if (!coll.contains(menu)) @@ -458,9 +457,8 @@ public List findIdByUserId(long userId, long parentId, Integer type) { return findIdsByWhere(ENTITY + ENABLED_1_AND + ENTITY + DOT_PARENT_ID + parentId + (type == null ? "" : AND + ENTITY + ".type=" + type), null, null); - StringBuilder query1 = new StringBuilder(); if (!user.getGroups().isEmpty()) { - query1 = new StringBuilder(SELECT_DISTINCT_A_LD_MENUID_FROM_LD_MENUGROUP_A_LD_MENU_B + StringBuilder query1 = new StringBuilder(SELECT_DISTINCT_A_LD_MENUID_FROM_LD_MENUGROUP_A_LD_MENU_B + " where B.ld_enabled=1 and B.ld_deleted=0 and A.ld_menuid=B.ld_id AND B.ld_parentid=" + parentId + " AND A.ld_groupid in ("); query1.append( @@ -698,11 +696,10 @@ public List findIdByUserId(long userId, long parentId) { if (user.isMemberOf(Group.GROUP_ADMIN)) return findIdsByWhere(ENTITY + DOT_PARENT_ID + parentId, null, null); - StringBuilder query1 = new StringBuilder(); Set precoll = user.getGroups(); Iterator iter = precoll.iterator(); if (!precoll.isEmpty()) { - query1 = new StringBuilder(SELECT_DISTINCT_A_LD_MENUID_FROM_LD_MENUGROUP_A_LD_MENU_B + StringBuilder query1 = new StringBuilder(SELECT_DISTINCT_A_LD_MENUID_FROM_LD_MENUGROUP_A_LD_MENU_B + " where B.ld_deleted=0 and A.ld_menuid=B.ld_id AND B.ld_parentid=" + parentId + " AND A.ld_groupid in ("); boolean first = true; diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateUserDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateUserDAO.java index 9e11a1c2f..1c8446498 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateUserDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateUserDAO.java @@ -715,11 +715,9 @@ public void delete(long userId, UserHistory transaction) throws PersistenceExcep User user = (User) findById(userId); Group userGroup = user.getUserGroup(); - if (user != null) { - user.setDeleted(PersistentObject.DELETED_CODE_DEFAULT); - user.setUsername(user.getUsername() + "." + user.getId()); - saveOrUpdate(user); - } + user.setDeleted(PersistentObject.DELETED_CODE_DEFAULT); + user.setUsername(user.getUsername() + "." + user.getId()); + saveOrUpdate(user); // Delete the user's group if (userGroup != null) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/AnonymousLoginFilter.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/AnonymousLoginFilter.java index 956b0fb0a..614c90a78 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/AnonymousLoginFilter.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/AnonymousLoginFilter.java @@ -43,7 +43,7 @@ public void doFilter(ServletRequest rec, ServletResponse res, FilterChain chain) Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if ((authentication == null || (authentication != null && !authentication.isAuthenticated())) + if ((authentication == null || !authentication.isAuthenticated()) && "login".equals(request.getParameter("anonymous"))) { String tenant = getTenant(request); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationFailureHandler.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationFailureHandler.java index 0a824543a..c2e401158 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationFailureHandler.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationFailureHandler.java @@ -41,7 +41,7 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo if (normalizedFailureUrl.startsWith("/")) normalizedFailureUrl = normalizedFailureUrl.substring(1); - log.info("Redirecting to {}", normalizedFailureUrl.toString()); + log.info("Redirecting to {}", normalizedFailureUrl); response.sendRedirect(failureUrl.toString()); } } \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationProvider.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationProvider.java index 57436f3fd..335dc316d 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationProvider.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/security/spring/LDAuthenticationProvider.java @@ -44,10 +44,10 @@ public class LDAuthenticationProvider implements AuthenticationProvider { public Authentication authenticate(Authentication authentication) throws AuthenticationException { UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) authentication; String username = String.valueOf(auth.getPrincipal()); - + HttpServletRequest httpReq = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest(); - + String password = getPassword(auth, httpReq); String key = httpReq.getParameter("key"); @@ -135,14 +135,16 @@ public Authentication authenticate(Authentication authentication) throws Authent LoginThrottle.recordFailure(username, client, owte); throw new CredentialsExpiredException(owte.getMessage()); - } catch (Throwable ae) { - String message = String.format("Security checks failed for user %s - %s", username, ae.getMessage()); - log.warn(message, ae); - - if (ae instanceof com.logicaldoc.core.security.authentication.AuthenticationException) - LoginThrottle.recordFailure(username, client, - (com.logicaldoc.core.security.authentication.AuthenticationException) ae); - throw new CredentialsExpiredException(ae.getMessage() != null ? ae.getMessage() : "badcredentials"); + } catch (com.logicaldoc.core.security.authentication.AuthenticationException ae) { + LoginThrottle.recordFailure(username, client, + (com.logicaldoc.core.security.authentication.AuthenticationException) ae); + throw new CredentialsExpiredException(ae.getMessage() != null + ? String.format("Security checks failed for user %s - %s", username, ae.getMessage()) + : "badcredentials"); + } catch (Exception e) { + throw new CredentialsExpiredException(e.getMessage() != null + ? String.format("Security checks failed for user %s - %s", username, e.getMessage()) + : "badcredentials"); } } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/sequence/HibernateSequenceDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/sequence/HibernateSequenceDAO.java index 62db66132..0afac196b 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/sequence/HibernateSequenceDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/sequence/HibernateSequenceDAO.java @@ -101,41 +101,20 @@ public List findByName(String name, long tenantId) { @Override public Sequence findByAlternateKey(String name, long objectId, long tenantId) { try { - Sequence sequence = null; + List sequences = findSequences(name, objectId, tenantId); - String query = " " + ENTITY + ".tenantId = :tenantId "; - query += AND + ENTITY + ".objectId = :objectId "; - query += AND + ENTITY + ".name = :name "; - List sequences = new ArrayList<>(); - try { - Map params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("objectId", objectId); - params.put("name", name); - - sequences = findByWhere(query, params, null, null); - } catch (Exception t) { - // Nothing to do - } + Sequence sequence = null; // It's incredible but the findByWhere sometimes doesn't find the // sequence so finding by the ID is safer if (sequences.isEmpty()) { - query = "select ld_id from ld_sequence where ld_name='" + SqlUtil.doubleQuotes(name) - + "' and ld_objectid=" + objectId + " and ld_tenantid=" + tenantId; - try { - long sequenceId = queryForLong(query); - if (sequenceId != 0L) - sequence = findById(sequenceId); - } catch (Exception t) { - log.warn(t.getMessage(), t); - } + sequence = findSequence(name, objectId, tenantId, sequence); } else { sequence = sequences.get(0); } if (sequence == null) - log.debug("Unable to find sequence " + name + "," + objectId + "," + tenantId); + log.debug("Unable to find sequence {},{},{}", name, objectId, tenantId); else refresh(sequence); @@ -146,6 +125,38 @@ public Sequence findByAlternateKey(String name, long objectId, long tenantId) { } } + private Sequence findSequence(String sequenceName, long objectId, long tenantId, Sequence sequence) { + String query = "select ld_id from ld_sequence where ld_name='" + SqlUtil.doubleQuotes(sequenceName) + + "' and ld_objectid=" + objectId + " and ld_tenantid=" + tenantId; + try { + long sequenceId = queryForLong(query); + if (sequenceId != 0L) + sequence = findById(sequenceId); + } catch (Exception t) { + log.warn(t.getMessage(), t); + } + return sequence; + } + + private List findSequences(String sequenceName, long objectId, long tenantId) { + List sequences = new ArrayList<>(); + try { + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("objectId", objectId); + params.put("name", sequenceName); + + String query = " " + ENTITY + ".tenantId = :tenantId "; + query += AND + ENTITY + ".objectId = :objectId "; + query += AND + ENTITY + ".name = :name "; + + sequences = findByWhere(query, params, null, null); + } catch (Exception t) { + // Nothing to do + } + return sequences; + } + @Override public void delete(String name, long objectId, long tenantId) throws PersistenceException { Sequence seq = findByAlternateKey(name, objectId, tenantId); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/stats/StatsCollector.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/stats/StatsCollector.java index f09efa75a..82b0a3073 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/stats/StatsCollector.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/stats/StatsCollector.java @@ -476,7 +476,7 @@ private void collectFeatureUsageStats(List postParams) { try { links = folderDAO.queryForLong("SELECT COUNT(ld_id) FROM ld_link where ld_deleted=0"); } catch (Exception t) { - log.warn("Unable to calculate links statistics - ", t.getMessage()); + log.warn("Unable to calculate links statistics - {}", t.getMessage()); } postParams.add(new BasicNameValuePair("links", Long.toString(links))); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/store/AbstractStorer.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/store/AbstractStorer.java index e63b43d33..b29ec0a4e 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/store/AbstractStorer.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/store/AbstractStorer.java @@ -153,7 +153,6 @@ public void writeToStream(long docId, String resource, OutputStream output, long try { IOUtils.copyLarge(getStream(docId, resource), output, start, length); } catch (IOException ioe) { - log.error(ioe.getMessage(), ioe); throw ioe; } } @@ -162,8 +161,7 @@ public void writeToStream(long docId, String resource, OutputStream output, long public void writeToStream(long docId, String resource, OutputStream output) throws IOException { try { IOUtils.copyLarge(getStream(docId, resource), output); - } catch (IOException ioe) { - log.error(ioe.getMessage(), ioe); + } catch (IOException ioe) {; throw ioe; } } @@ -175,7 +173,6 @@ public void writeToFile(long docId, String resource, File out) throws IOExceptio InputStream is = getStream(docId, resource);) { FileUtil.writeFile(is, out.getPath()); } catch (IOException ioe) { - log.error(ioe.getMessage(), ioe); throw ioe; } catch (Exception e) { log.error("Error writing document {} into {}", docId, out.getPath()); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/system/SystemLoadMonitor.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/system/SystemLoadMonitor.java index 3fbd3b4e5..139d47787 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/system/SystemLoadMonitor.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/system/SystemLoadMonitor.java @@ -75,8 +75,7 @@ private void initSamples() { public int getCpuLoad() { // try to get the CPU usage with JMX OperatingSystemMXBean osMXBean = ManagementFactory.getOperatingSystemMXBean(); - int load = (int) Math - .round((osMXBean.getSystemLoadAverage() / osMXBean.getAvailableProcessors()) * 100d); + int load = (int) Math.round((osMXBean.getSystemLoadAverage() / osMXBean.getAvailableProcessors()) * 100d); if (load < 0) { // On some systems Java is not able to get the CPU usage so try to // extract the information from the shell @@ -249,18 +248,18 @@ public void run() { private void checkOverloadOrUnderload() { if (isAverageCpuOverLoaded()) { - if(!lastCheckOverloaded) - log.warn("The system is overloaded (" + averageCpuLoad + "%)"); - lastCheckOverloaded=true; - + if (!lastCheckOverloaded) + log.warn("The system is overloaded ({}%)", averageCpuLoad); + lastCheckOverloaded = true; + for (SystemLoadListener listener : listeners) { listener.onOverload(averageCpuLoad, averageCpuLoad); } } else { - if(lastCheckOverloaded) - log.warn("The system is underloaded (" + averageCpuLoad + "%)"); - lastCheckOverloaded=false; - + if (lastCheckOverloaded) + log.warn("The system is underloaded ({}%)", averageCpuLoad); + lastCheckOverloaded = false; + for (SystemLoadListener listener : listeners) { listener.onUnderload(averageCpuLoad, averageCpuLoad); } diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/AbstractDocumentProcessor.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/AbstractDocumentProcessor.java index ff828d437..536e96d8f 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/AbstractDocumentProcessor.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/AbstractDocumentProcessor.java @@ -48,64 +48,13 @@ protected void runTask() throws TaskException { try { int max = getBatchSize(); - String where = prepareQueueQuery(null, null); @SuppressWarnings("unchecked") - List ids = documentDao.queryForList("select ld_id from ld_document where " + where, null, Long.class, - max); - + List ids = documentDao.queryForList( + "select ld_id from ld_document where " + prepareQueueQuery(null, null), null, Long.class, max); getSize(max, ids); - if (size > 0) { - String idsStr = ids.stream().map(id -> Long.toString(id)).collect(Collectors.joining(",")); - - // Mark all these documents as belonging to the current - // transaction - documentDao.bulkUpdate("set ld_transactionid='" + transactionId + "' where ld_id in " + idsStr, - (Map) null); - - // Now we can release the lock - lockManager.release(getName(), transactionId); - - where = prepareQueueQuery(transactionId, null); - - @SuppressWarnings("unchecked") - List records = documentDao.query( - "select ld_id, ld_filename from ld_document where ld_id in " + idsStr, null, - new RowMapper() { - @Override - public Object[] mapRow(ResultSet rs, int row) throws SQLException { - Object[] rec = new Object[2]; - rec[0] = rs.getLong(1); - rec[1] = rs.getString(2); - return rec; - } - }, max); - - User user = loadUser(); - for (Object[] cols : records) { - long id = (Long) cols[0]; - log.debug("Process document {}", id); - - try { - Document doc = documentDao.findById(id); - if (doc == null || doc.getBarcoded() != 0 || doc.getBarcodeTemplateId() == null) - continue; - documentDao.initialize(doc); - - processDocument(doc, user); - - log.debug("Processed document {}", id); - processed++; - } catch (Exception e) { - log.error(e.getMessage(), e); - errors++; - } finally { - next(); - } - if (interruptRequested) - return; - } - } + if (size > 0) + processDocuments(ids, max); } catch (PersistenceException e) { throw new TaskException(e.getMessage(), e); } finally { @@ -120,6 +69,55 @@ public Object[] mapRow(ResultSet rs, int row) throws SQLException { } } + private void processDocuments(List docIds, int max) throws PersistenceException { + String idsStr = docIds.stream().map(id -> Long.toString(id)).collect(Collectors.joining(",")); + + // Mark all these documents as belonging to the current + // transaction + documentDao.bulkUpdate("set ld_transactionid='" + transactionId + "' where ld_id in " + idsStr, + (Map) null); + + // Now we can release the lock + lockManager.release(getName(), transactionId); + + @SuppressWarnings("unchecked") + List records = documentDao.query( + "select ld_id, ld_filename from ld_document where ld_id in " + idsStr, null, new RowMapper() { + @Override + public Object[] mapRow(ResultSet rs, int row) throws SQLException { + Object[] rec = new Object[2]; + rec[0] = rs.getLong(1); + rec[1] = rs.getString(2); + return rec; + } + }, max); + + User user = loadUser(); + for (Object[] cols : records) { + long id = (Long) cols[0]; + log.debug("Process document {}", id); + + try { + Document doc = documentDao.findById(id); + if (doc == null || doc.getBarcoded() != 0 || doc.getBarcodeTemplateId() == null) + continue; + documentDao.initialize(doc); + + processDocument(doc, user); + + log.debug("Processed document {}", id); + processed++; + } catch (Exception e) { + log.error(e.getMessage(), e); + errors++; + } finally { + next(); + } + if (interruptRequested) + return; + } + } + private void removeTransactionReference() { try { documentDao.bulkUpdate("set ld_transactionid=null where ld_transactionId='" + transactionId + "'", diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/DefaultSchedulerFactory.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/DefaultSchedulerFactory.java index e4a54f925..35c828449 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/DefaultSchedulerFactory.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/DefaultSchedulerFactory.java @@ -9,6 +9,7 @@ import org.quartz.Trigger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.scheduling.SchedulingException; @@ -81,7 +82,7 @@ public void setApplicationContext(ApplicationContext applicationContext) { for (Task task : tasks) { String name = task.getName(); Object trigger = applicationContext.getBean(name + "Trigger"); - if (trigger != null && trigger instanceof Trigger) { + if (trigger instanceof Trigger) { triggers.add((Trigger) trigger); } else log.warn("Cannot schedule task {}", name); @@ -89,11 +90,9 @@ public void setApplicationContext(ApplicationContext applicationContext) { // Some default triggers try { - Trigger trigger = (Trigger) applicationContext.getBean("TempFolderCleaner"); - if (trigger != null) - triggers.add(trigger); - } catch (Exception t) { - // Noting to do + triggers.add((Trigger) applicationContext.getBean("TempFolderCleaner")); + } catch (BeansException e) { + // Nothing to do } if (!triggers.isEmpty()) diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/Task.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/Task.java index f4f66d676..7ce37df25 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/Task.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/Task.java @@ -458,10 +458,10 @@ public void setUserDao(UserDAO userDao) { */ public void save() throws IOException, ParseException { getScheduling().save(); - ContextProperties config = Context.get().getProperties(); - config.setProperty("task.recipients." + name, getReportRecipients()); - config.setProperty("task.sendreport." + name, isSendActivityReport() ? "true" : "false"); - config.write(); + ContextProperties props = Context.get().getProperties(); + props.setProperty("task.recipients." + name, getReportRecipients()); + props.setProperty("task.sendreport." + name, isSendActivityReport() ? "true" : "false"); + props.write(); } public boolean isSendActivityReport() { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/TaskTrigger.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/TaskTrigger.java index 36e0ee528..32c8dcd28 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/task/TaskTrigger.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/task/TaskTrigger.java @@ -140,7 +140,7 @@ public void setConfig(ContextProperties config) { public long getRepeatInterval() { SimpleTrigger triggerObject = simpleTrigger.getObject(); - if (simpleTrigger != null && triggerObject != null) + if (triggerObject != null) return triggerObject.getRepeatInterval(); else return -1; diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/InMemoryZipImport.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/InMemoryZipImport.java index 298be8044..db6dd2956 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/InMemoryZipImport.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/InMemoryZipImport.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.logicaldoc.core.PersistenceException; import com.logicaldoc.core.document.Document; import com.logicaldoc.core.document.DocumentEvent; import com.logicaldoc.core.document.DocumentHistory; @@ -37,61 +38,16 @@ public InMemoryZipImport(Document docVo, String charset) { super(docVo, charset); } - @Override public void process(File zipsource, Folder parent, long userId, String sessionId) { this.zipFile = zipsource; this.sessionId = sessionId; UserDAO userDao = (UserDAO) Context.get().getBean(UserDAO.class); - FolderDAO fDao = (FolderDAO) Context.get().getBean(FolderDAO.class); - DocumentManager docManager = (DocumentManager) Context.get().getBean(DocumentManager.class); try { this.user = userDao.findById(userId); - - // Open the Zip and list all the contents - ZipUtil zipUtil = new ZipUtil(); - zipUtil.setFileNameCharset(fileNameCharset); - List entries = zipUtil.listEntries(zipsource); - - for (String entry : entries) { - String relativePath = FileUtil.getPath(entry); - if (relativePath.startsWith("/")) - relativePath = relativePath.substring(1); - if (relativePath.endsWith("/")) - relativePath = relativePath.substring(0, relativePath.length() - 1); - - // Ensure to have the proper folder to upload the file into - FolderHistory folderTransaction = new FolderHistory(); - folderTransaction.setSessionId(sessionId); - folderTransaction.setUser(user); - Folder folder = fDao.createPath(parent, relativePath, true, folderTransaction); - - // Create the document - String fileName = FileUtil.getName(entry); - String title = FileUtil.getBaseName(fileName); - - if (StringUtils.isEmpty(fileName) || StringUtils.isEmpty(title)) - continue; - - try { - Document doc = new Document(docVo); - doc.setId(0L); - doc.setFileName(fileName); - doc.setFolder(folder); - - DocumentHistory history = new DocumentHistory(); - history.setEvent(DocumentEvent.STORED.toString()); - history.setComment(""); - history.setUser(user); - history.setSessionId(sessionId); - - docManager.create(zipUtil.getEntryStream(zipsource, entry), doc, history); - } catch (Exception e) { - logger.warn("InMemoryZipImport unable to import ZIP entry {}", entry, e); - } - } + extractEntries(zipsource, parent, sessionId); } catch (Exception e) { logger.error("InMemoryZipImport process failed", e); } @@ -99,4 +55,52 @@ public void process(File zipsource, Folder parent, long userId, String sessionId if (isNotifyUser()) sendNotificationMessage(); } + + private void extractEntries(File sourceZipFile, Folder parent, String sessionId) throws PersistenceException { + FolderDAO fDao = (FolderDAO) Context.get().getBean(FolderDAO.class); + DocumentManager docManager = (DocumentManager) Context.get().getBean(DocumentManager.class); + + // Open the Zip and list all the contents + ZipUtil zipUtil = new ZipUtil(); + zipUtil.setFileNameCharset(fileNameCharset); + List entries = zipUtil.listEntries(sourceZipFile); + + for (String entry : entries) { + String fileName = FileUtil.getName(entry); + String title = FileUtil.getBaseName(fileName); + + if (StringUtils.isEmpty(fileName) || StringUtils.isEmpty(title)) + continue; + + String relativePath = FileUtil.getPath(entry); + if (relativePath.startsWith("/")) + relativePath = relativePath.substring(1); + if (relativePath.endsWith("/")) + relativePath = relativePath.substring(0, relativePath.length() - 1); + + // Ensure to have the proper folder to upload the file into + FolderHistory folderTransaction = new FolderHistory(); + folderTransaction.setSessionId(sessionId); + folderTransaction.setUser(user); + Folder folder = fDao.createPath(parent, relativePath, true, folderTransaction); + + // Create the document + Document doc = new Document(docVo); + doc.setId(0L); + doc.setFileName(fileName); + doc.setFolder(folder); + + DocumentHistory history = new DocumentHistory(); + history.setEvent(DocumentEvent.STORED.toString()); + history.setComment(""); + history.setUser(user); + history.setSessionId(sessionId); + + try { + docManager.create(zipUtil.getEntryStream(sourceZipFile, entry), doc, history); + } catch (Exception e) { + logger.warn("InMemoryZipImport unable to import ZIP entry {}", entry, e); + } + } + } } \ No newline at end of file diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipExport.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipExport.java index 1941264ee..e169fb5c0 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipExport.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipExport.java @@ -156,7 +156,7 @@ public void process(Long[] docIds, OutputStream out, boolean pdfConversion, Docu if ("pdf".equals(doc.getDocRefType())) convertToPdf = true; } - addDocument("", doc, convertToPdf, transaction.getSessionId()); + addDocument("", doc, convertToPdf); try { zos.flush(); @@ -247,7 +247,7 @@ protected void addFolderDocuments(Folder folder, boolean pdfConversion, String s convertToPdf = true; } - addDocument(getZipEntryPath(folder), doc, convertToPdf, sid); + addDocument(getZipEntryPath(folder), doc, convertToPdf); } } @@ -275,9 +275,8 @@ private String adjustFileNameForWindows(String src) { * @param path path to store the document in * @param document the document * @param pdfConversion if the PDF conversion has to be used instead - * @param sid identifier of the session */ - private void addDocument(String path, Document document, boolean pdfConversion, String sid) { + private void addDocument(String path, Document document, boolean pdfConversion) { Storer storer = (Storer) Context.get().getBean(Storer.class); String resource = storer.getResourceName(document, null, null); diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipImport.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipImport.java index 07f43aa9d..347a869ed 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipImport.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/transfer/ZipImport.java @@ -5,7 +5,6 @@ import java.text.MessageFormat; import java.util.Date; import java.util.HashSet; -import java.util.Locale; import java.util.ResourceBundle; import java.util.Set; @@ -82,16 +81,7 @@ public void process(File zipsource, Folder parent, long userId, String sessionId ZipUtil zipUtil = new ZipUtil(); zipUtil.unzip(zipFile.getPath(), dir.getPath()); File[] files = dir.listFiles(); - - for (int i = 0; i < files.length; i++) { - if (StringUtils.isNotEmpty(files[i].getName()) - || StringUtils.isNotEmpty(FileUtil.getBaseName(files[i].getName()))) - try { - addEntry(files[i], parent); - } catch (PersistenceException e) { - log.error("Error adding entry " + files[i].getName(), e); - } - } + addEntries(parent, files); } catch (IOException e) { log.error(e.getMessage(), e); } finally { @@ -110,6 +100,18 @@ public void process(File zipsource, Folder parent, long userId, String sessionId } } + private void addEntries(Folder parentFolder, File[] files) { + for (int i = 0; i < files.length; i++) { + if (StringUtils.isNotEmpty(files[i].getName()) + || StringUtils.isNotEmpty(FileUtil.getBaseName(files[i].getName()))) + try { + addEntry(files[i], parentFolder); + } catch (PersistenceException e) { + log.error("Error adding entry " + files[i].getName(), e); + } + } + } + private File prepareUnzipDir(long userId) { File dir = UserUtil.getUserResource(userId, "unzip"); if (dir.exists()) { @@ -128,8 +130,7 @@ private File prepareUnzipDir(long userId) { return dir; } - public void process(String zipsource, Locale locale, Folder parent, long userId, Long templateId, String sessionId) - throws PersistenceException { + public void process(String zipsource, Folder parent, long userId, String sessionId) throws PersistenceException { File srcfile = new File(zipsource); process(srcfile, parent, userId, sessionId); } @@ -151,8 +152,7 @@ protected void addEntry(File file, Folder parent) throws PersistenceException { transaction.setSessionId(sessionId); Session session = SessionManager.get().get(sessionId); - if (transaction != null) - transaction.setSession(session); + transaction.setSession(session); if (file.isDirectory()) { // creates a logicaldoc folder diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/DocUtil.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/DocUtil.java index efad4f857..610ff6d2b 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/DocUtil.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/DocUtil.java @@ -20,6 +20,9 @@ public class DocUtil { protected static Logger log = LoggerFactory.getLogger(DocUtil.class); + private DocUtil() { + } + public static String getFileName(Document document, String fileVersion) { String fileName = document.getFileName(); if (StringUtils.isNotEmpty(fileVersion) && !fileVersion.equals(document.getFileVersion())) { diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/GhostUtil.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/GhostUtil.java index 7dea7b047..97603b7fc 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/GhostUtil.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/GhostUtil.java @@ -34,6 +34,9 @@ public class GhostUtil { protected static Logger log = LoggerFactory.getLogger(GhostUtil.class); + private GhostUtil() { + } + /** * Prints a PDF file into a Jpeg image using 150dpi resolution * diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/IconSelector.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/IconSelector.java index b3be7b617..3614958db 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/IconSelector.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/IconSelector.java @@ -11,6 +11,9 @@ */ public class IconSelector { + private IconSelector() { + } + /** * Returns the icon by parsing the provided file extension * diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/UserUtil.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/UserUtil.java index eec8f2650..f49b157ca 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/util/UserUtil.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/util/UserUtil.java @@ -42,6 +42,9 @@ public class UserUtil { protected static Logger log = LoggerFactory.getLogger(UserUtil.class); + private UserUtil() { + } + /** * This method retrieves the user folder. If not exists, it creates the * folder. The folder is: conf.userdir/id @@ -98,11 +101,7 @@ public static File getUsersDir() { try { ContextProperties conf = Context.get().getProperties(); userpath = new File(conf.getPropertyWithSubstitutions("conf.userdir")); - try { - FileUtils.forceMkdir(userpath); - } catch (IOException e) { - return null; - } + FileUtils.forceMkdir(userpath); } catch (Exception t) { // Nothing to do } diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentComparatorTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentComparatorTest.java index a0a89022c..d298a083a 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentComparatorTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentComparatorTest.java @@ -2,7 +2,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import java.util.Collections; import java.util.Comparator; diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentManagerImplTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentManagerImplTest.java index e43a03e32..07aa865ef 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentManagerImplTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/DocumentManagerImplTest.java @@ -11,6 +11,8 @@ import java.io.InputStream; import java.util.Arrays; import java.util.Calendar; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.junit.Test; @@ -99,7 +101,8 @@ public void testUpdate() throws PersistenceException, InterruptedException { Assert.assertEquals("pluto(1)", doc.getFileName()); Assert.assertEquals("1.1", doc.getVersion()); - Thread.sleep(2000L); + waiting(); + Assert.assertEquals("1.1", verDao.queryForString("select ld_version from ld_version where ld_documentid=" + doc.getId() + " and ld_version='" + doc.getVersion() + "'")); } @@ -118,8 +121,6 @@ public void testCreateDownloadTicket() throws PersistenceException, PermissionEx Ticket t = documentManager.createDownloadTicket(1L, null, null, null, null, null, transaction); Assert.assertNotNull(t.getUrl()); - Thread.sleep(1000); - t = documentManager.createDownloadTicket(1L, null, 2, null, null, null, transaction); Assert.assertNotNull(t.getUrl()); @@ -270,15 +271,21 @@ public void testEnforceFilesIntoFolderStorage() String store2Root = Context.get().getProperties().getPropertyWithSubstitutions("store.2.dir"); Assert.assertTrue(new File(storeRoot + "/1/doc/" + doc.getFileVersion()).exists()); - - Thread.sleep(3000); - - int count = new File(storeRoot + "/1/doc/").list().length; - Assert.assertEquals(1, count); + + CountDownLatch lock = new CountDownLatch(1); + Runnable listFiles= ()->{ + while(new File(storeRoot + "/1/doc/").list().length ==0); + lock.countDown(); + }; + Thread th=new Thread(listFiles); + th.start(); + lock.await(4000, TimeUnit.MILLISECONDS); + + Assert.assertEquals(0, lock.getCount()); transaction = new DocumentHistory(); transaction.setUser(user); - Assert.assertEquals(1, documentManager.enforceFilesIntoFolderStorage(folder.getId(), transaction)); + Assert.assertEquals(3, documentManager.enforceFilesIntoFolderStorage(folder.getId(), transaction)); Assert.assertTrue(new File(store2Root + "/1/doc/" + doc.getFileVersion()).exists()); } @@ -518,9 +525,8 @@ public void run() { DocumentManagerImpl docMan = (DocumentManagerImpl) documentManager; docMan.storeVersionAsync(version); - Thread.sleep(4000L); - - assertEquals(101L, version.getId()); + waiting(); + assertEquals(101L, version.getDocId()); assertNotNull(docDao.findById(version.getDocId())); } @@ -547,7 +553,8 @@ public void testCreate() throws PersistenceException, FileNotFoundException, Int Assert.assertEquals("1.0", newDoc.getVersion()); Assert.assertEquals("1.0", newDoc.getFileVersion()); - Thread.sleep(2000L); + waiting(); + Version ver = verDao.findByVersion(newDoc.getId(), newDoc.getVersion()); Assert.assertNotNull(ver); @@ -670,7 +677,7 @@ public void testCheckin() throws PersistenceException, IOException { documentManager.checkin(1L, is, "pippo", true, doc, transaction); } catch (PersistenceException e) { exceptionHappened = true; - Assert.assertEquals("error", e.getMessage()); + Assert.assertEquals("Cannot save the new version pippo (1) into the storage", e.getMessage()); } Assert.assertTrue(exceptionHappened); @@ -830,7 +837,6 @@ public void testFailedStoreCreate() throws PersistenceException, FileNotFoundExc Assert.assertTrue(exceptionHappened); // Now check that the document was deleted - Assert.assertTrue(doc.getId() != 0L); Assert.assertNull(docDao.findById(doc.getId())); } @@ -873,4 +879,20 @@ public void testFailedStoreCheckin() throws PersistenceException { Assert.assertEquals(Document.DOC_CHECKED_OUT, doc.getStatus()); Assert.assertEquals("1.0", doc.getFileVersion()); } + + private void waiting() throws InterruptedException { + final int millis = 5000; + CountDownLatch lock = new CountDownLatch(1); + Runnable waiting = ()->{ + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + lock.countDown(); + }; + Thread th=new Thread(waiting); + th.start(); + lock.await(4000, TimeUnit.MILLISECONDS); + } } \ No newline at end of file diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/dao/HibernateDocumentHistoryDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/dao/HibernateDocumentHistoryDAOTest.java index 10092f9ef..c28b2b099 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/dao/HibernateDocumentHistoryDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/dao/HibernateDocumentHistoryDAOTest.java @@ -160,8 +160,8 @@ public void testStore() throws PersistenceException { } } - Assert.assertTrue(hStored.equals(folderHistory)); - Assert.assertEquals(hStored.getFolderId(), new Long(5)); + Assert.assertEquals(folderHistory, hStored); + Assert.assertEquals(hStored.getFolderId(), Long.valueOf(5L)); Assert.assertEquals(hStored.getDate().getTime(), DateBean.dateFromCompactString("20061220").getTime()); Assert.assertEquals(hStored.getUsername(), "sebastian"); Assert.assertEquals(hStored.getEvent(), "test History store"); diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderDAOTest.java index c7cd1b70d..a04cdc890 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderDAOTest.java @@ -103,13 +103,13 @@ public void testCreatePath() throws Exception { null); Assert.assertNotNull(folder); Assert.assertEquals("research development", folder.getName()); - + folder = dao.createPath(docsFolder, "/Capo d'Orlando 05-35632/Comunicazioni ingresso", true, null); Assert.assertNotNull(folder); folder = dao.findById(folder.getParentId()); Assert.assertEquals("Capo d'Orlando 05-35632", folder.getName()); } - + @Test public void testCount() throws PersistenceException { int docCount = dao.count(false); @@ -118,7 +118,7 @@ public void testCount() throws PersistenceException { System.out.println("Total Documents count: " + docCountDelete); assertEquals(4, docCount); assertEquals(7, docCountDelete); - } + } @Test public void testFind() throws PersistenceException { @@ -194,27 +194,26 @@ public void testDeleteTree() throws Exception { transaction.setUser(user); dao.deleteTree(1200L, PersistentObject.DELETED_CODE_DEFAULT, transaction); Assert.assertNull(dao.findById(1200)); - - boolean runOk=false; + + boolean runOk = false; try { - dao.deleteTree(null,1, new FolderHistory(transaction)); - runOk=true; - }catch(PersistenceException e) { + dao.deleteTree(null, 1, new FolderHistory(transaction)); + runOk = true; + } catch (PersistenceException e) { Assert.assertEquals("No folder was specified", e.getMessage()); } - + Assert.assertFalse(runOk); - - runOk=false; + + runOk = false; try { dao.deleteTree(dao.findById(1200), 0, new FolderHistory(transaction)); - runOk=true; - }catch(PersistenceException e) { + runOk = true; + } catch (PersistenceException e) { Assert.assertEquals("Deletion code cannot be 0", e.getMessage()); } Assert.assertFalse(runOk); - - + // Delete an alias Folder alias = dao.createAlias(4L, 6, new FolderHistory(transaction)); Assert.assertNotNull(alias); @@ -352,7 +351,7 @@ public void testMoveFolder_Simple() throws Exception { dao.move(folderC, folderA, transaction); List folderList = dao.findChildren(folderA.getId(), null); - Assert.assertTrue(folderList.size() == 1); + Assert.assertEquals(1, folderList.size()); Assert.assertTrue(folderList.contains(folderC)); } @@ -382,11 +381,11 @@ public void testMoveFolder_Up() throws Exception { dao.move(folderC, folderA, transaction); List folderList = dao.findChildren(folderA.getId(), null); - Assert.assertTrue(folderList.size() == 1); + Assert.assertEquals(1, folderList.size()); Assert.assertTrue(folderList.contains(folderC)); folderList = dao.findChildren(folderB.getId(), null); - Assert.assertTrue(folderList.size() == 0); + Assert.assertEquals(0, folderList.size()); } @Test @@ -428,12 +427,12 @@ public void testMoveFolder_UpWithDocuments() throws Exception { Assert.assertEquals(folderC.getName(), fc.getName()); List folderList = dao.findChildren(folderA.getId(), null); - Assert.assertTrue(folderList.size() == 1); + Assert.assertEquals(1, folderList.size()); Assert.assertTrue(folderList.contains(folderC)); folderList = dao.findChildren(folderB.getId(), null); - Assert.assertTrue(folderList.size() == 0); + Assert.assertEquals(0, folderList.size()); List docs = docDao.findByIndexed(0); Assert.assertEquals(1, docs.size()); @@ -475,11 +474,11 @@ public void testMoveFolder_Down() throws Exception { dao.move(folderE, folderD, transaction); List folderList = dao.findChildren(folderD.getId(), null); - Assert.assertTrue(folderList.size() == 1); + Assert.assertEquals(1, folderList.size()); Assert.assertTrue(folderList.contains(folderE)); folderList = dao.findChildren(folderC.getId(), null); - Assert.assertTrue(folderList.size() == 1); + Assert.assertEquals(1, folderList.size()); } @Test @@ -530,7 +529,7 @@ public void testStore() throws PersistenceException { // Test updating the security rules folder = dao.findById(folder.getId()); dao.initialize(folder); - Assert.assertTrue(folder.getFolderGroups().size() == 2); + Assert.assertEquals(2, folder.getFolderGroups().size()); FolderGroup fg = new FolderGroup(); fg.setGroupId(3L); fg.setPermissions(5); @@ -539,7 +538,7 @@ public void testStore() throws PersistenceException { Assert.assertNotNull(folder); folder = dao.findById(folder.getId()); dao.initialize(folder); - Assert.assertTrue(folder.getFolderGroups().size() == 3); + Assert.assertEquals(3, folder.getFolderGroups().size()); // Set a securityRef folder.setSecurityRef(5L); diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderHistoryDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderHistoryDAOTest.java index f41bda236..895cabc75 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderHistoryDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderHistoryDAOTest.java @@ -117,6 +117,7 @@ public void testCreateFolderHistory() throws PersistenceException { Assert.assertEquals(3, histories.size()); } + @SuppressWarnings("deprecation") @Test public void testStore() throws PersistenceException { FolderHistory history = new FolderHistory(); @@ -153,8 +154,8 @@ public void testStore() throws PersistenceException { } } - Assert.assertTrue(hStored.equals(folderFolderHistory)); - Assert.assertEquals(hStored.getFolderId(), new Long(5)); + Assert.assertEquals(folderFolderHistory, hStored); + Assert.assertEquals(hStored.getFolderId(), Long.valueOf(5L)); Assert.assertEquals(hStored.getDate().getTime(), DateBean.dateFromCompactString("20061220").getTime()); Assert.assertEquals(hStored.getUsername(), "sebastian"); Assert.assertEquals(hStored.getEvent(), "test FolderHistory store"); diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/SessionManagerTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/SessionManagerTest.java index 0e3f39236..aa25c4487 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/SessionManagerTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/SessionManagerTest.java @@ -4,8 +4,6 @@ import org.junit.Test; import com.logicaldoc.core.AbstractCoreTCase; -import com.logicaldoc.core.security.dao.GroupDAO; -import com.logicaldoc.core.security.dao.UserDAO; import com.logicaldoc.util.Context; import com.logicaldoc.util.config.ContextProperties; @@ -23,7 +21,7 @@ public class SessionManagerTest extends AbstractCoreTCase { public void setUp() throws Exception { super.setUp(); } - + @Test public void testNewSession() { SessionManager sm = SessionManager.get(); @@ -32,7 +30,7 @@ public void testNewSession() { Assert.assertNotNull(session1); Session session2 = sm.newSession("admin", "admin", null); Assert.assertNotNull(session2); - Assert.assertFalse(session1.equals(session2)); + Assert.assertNotSame(session1, session2); Assert.assertEquals(2, sm.getSessions().size()); } @@ -44,7 +42,7 @@ public void testKill() { Assert.assertNotNull(session1); Session session2 = sm.newSession("admin", "admin", null); Assert.assertNotNull(session2); - Assert.assertFalse(session1.equals(session2)); + Assert.assertNotSame(session1, session2); Assert.assertEquals(2, sm.getSessions().size()); sm.kill(session1.getSid()); @@ -64,6 +62,12 @@ public void testTimeout() { Session session1 = sm.newSession("admin", "admin", null); Assert.assertNotNull(session1); + waiting(timeout); + + Assert.assertFalse(sm.isOpen(session1.getSid())); + } + + private void waiting(int timeout) { synchronized (this) { try { wait(1000 * 60 * timeout); @@ -71,7 +75,5 @@ public void testTimeout() { Thread.currentThread().interrupt(); } } - - Assert.assertFalse(sm.isOpen(session1.getSid())); } } diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateMenuDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateMenuDAOTest.java index d09a9e452..df8c0e8bd 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateMenuDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateMenuDAOTest.java @@ -153,10 +153,10 @@ public void testFindByUserId() { menus = dao.findByUserId(4, 2, false); Assert.assertNotNull(menus); Assert.assertEquals(2, menus.size()); - + menus = dao.findByUserId(4); Assert.assertNotNull(menus); - Assert.assertEquals(25, menus.size()); + Assert.assertEquals(25, menus.size()); } @Test @@ -226,7 +226,7 @@ public void testFindIdByUserId() { ids = dao.findIdByUserId(99, 101); Assert.assertNotNull(ids); Assert.assertEquals(0, ids.size()); - } + } @Test public void testHasWriteAccess() throws PersistenceException { @@ -329,19 +329,20 @@ public void testApplyRightsToTree() throws PersistenceException { user.setId(4); Menu menu = dao.findById(1041); - Assert.assertTrue(null == menu.getSecurityRef()); + Assert.assertNull(menu.getSecurityRef()); Assert.assertTrue(dao.applyRightToTree(-101)); menu = dao.findById(-104); - Assert.assertTrue(-101 == menu.getSecurityRef()); + Assert.assertEquals(Long.valueOf(-101L), menu.getSecurityRef()); menu = dao.findById(1041); - Assert.assertTrue(-101 == menu.getSecurityRef()); + Assert.assertEquals(Long.valueOf(-101L), menu.getSecurityRef()); } @Test public void testCreatePath() throws PersistenceException { Menu newMenu = dao.createPath(72L, 1L, Menu.TYPE_CUSTOM_ACTION, "/pippo/pluto/paperino", true); - Assert.assertNotNull(newMenu); - Assert.assertEquals("/administration/system/general/logs/pippo/pluto/paperino", dao.computePathExtended(newMenu.getId())); + Assert.assertNotNull(newMenu); + Assert.assertEquals("/administration/system/general/logs/pippo/pluto/paperino", + dao.computePathExtended(newMenu.getId())); } } \ No newline at end of file diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateUserHistoryDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateUserHistoryDAOTest.java index cd0e73ad7..f1400d380 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateUserHistoryDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/security/dao/HibernateUserHistoryDAOTest.java @@ -97,7 +97,7 @@ public void testStore() throws PersistenceException { } } - Assert.assertTrue(hStored.equals(newUserHistory)); + Assert.assertEquals(hStored, newUserHistory); Assert.assertEquals(hStored.getDate().getTime(), DateBean.dateFromCompactString("20061220").getTime()); Assert.assertEquals(hStored.getUsername(), "sebastian"); Assert.assertEquals(hStored.getEvent(), "second test User History store"); diff --git a/logicaldoc-dropbox/src/main/java/com/logicaldoc/dropbox/DropboxServiceImpl.java b/logicaldoc-dropbox/src/main/java/com/logicaldoc/dropbox/DropboxServiceImpl.java index 93cbf239a..3c52aa19d 100644 --- a/logicaldoc-dropbox/src/main/java/com/logicaldoc/dropbox/DropboxServiceImpl.java +++ b/logicaldoc-dropbox/src/main/java/com/logicaldoc/dropbox/DropboxServiceImpl.java @@ -77,9 +77,8 @@ public boolean isConnected() throws ServerException { if (accessToken == null) return false; return dbox.login(accessToken); - } catch (Exception t) { - log.error(t.getMessage(), t); - throw new ServerException(t.getMessage(), t); + } catch (Exception e) { + throw new ServerException(e.getMessage(), e); } } @@ -91,7 +90,6 @@ public String startAuthorization() throws ServerException { Dropbox dbox = new Dropbox(); return dbox.startAuthorization(session.getUser().getLocale()); } catch (Exception t) { - log.error(t.getMessage(), t); throw new ServerException(t.getMessage(), t); } } @@ -111,7 +109,6 @@ public String finishAuthorization(String authorizationCode) throws ServerExcepti saveAccessToken(user, token, account); return account; } catch (Exception t) { - log.error(t.getMessage(), t); throw new ServerException(t.getMessage(), t); } } diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Constants.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Constants.java index 3f9cfcd73..c864ec87d 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Constants.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Constants.java @@ -181,4 +181,7 @@ public final class Constants { public static final String[] FULLTEXT_DEFAULT_FIELDS = new String[] { FULLTEXT_FIELD_FILENAME, FULLTEXT_FIELD_CONTENT, FULLTEXT_FIELD_TAGS }; + + private Constants() { + } } \ No newline at end of file diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/CookiesManager.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/CookiesManager.java index 18c73d56a..4699040bd 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/CookiesManager.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/CookiesManager.java @@ -38,6 +38,9 @@ public class CookiesManager { public static final String COOKIE_JSESSIONID = "JSESSIONID"; + private CookiesManager() { + } + /** * Removes the cookies that store the session ID */ @@ -95,13 +98,13 @@ public static void removeAllCookies() { } catch (Exception t) { // Nothing to do } - + try { Offline.remove(COOKIE_SAVELOGIN); } catch (Exception t) { // Nothing to do } - + try { Offline.remove(COOKIE_USER); } catch (Exception t) { diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Feature.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Feature.java index a63226ff4..d2dbc7b85 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Feature.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Feature.java @@ -215,6 +215,10 @@ public class Feature { private static Set features = new HashSet<>(); + private Feature() { + + } + static public void init(GUIInfo info) { features.clear(); for (String feature : info.getFeatures()) { diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/InputValues.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/InputValues.java index 6e5ce8f72..ad114e7f0 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/InputValues.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/InputValues.java @@ -16,6 +16,9 @@ public class InputValues { // Item name - Inputed value private static Map> savedInputs = new HashMap<>(); + private InputValues() { + } + public static void saveInput(String name, Object value) { if (value == null || !Session.get().getConfigAsBoolean("gui.saveinputs")) return; diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Menu.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Menu.java index d557aeb82..80698fe29 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Menu.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Menu.java @@ -195,6 +195,8 @@ public class Menu { private static Set menus = new HashSet<>(); + private Menu() {} + static public void init(GUIUser user) { menus.clear(); for (long menu : user.getMenus()) { diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Session.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Session.java index 7fd9af718..5923f679e 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Session.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/Session.java @@ -32,7 +32,7 @@ public class Session implements DocumentObserver { private GUIInfo info; - private GUISession session; + private GUISession guiSession; private Long hiliteDocId; @@ -62,15 +62,15 @@ public boolean isDevel() { } public String getSid() { - if (session != null) - return session.getSid(); + if (guiSession != null) + return guiSession.getSid(); else return null; } public String getIncomingMessage() { - if (session != null) - return session.getWelcomeMessage(); + if (guiSession != null) + return guiSession.getWelcomeMessage(); else return null; } @@ -80,7 +80,7 @@ public boolean isFolderPagination() { } public void close() { - session = null; + guiSession = null; sessionObservers.clear(); if (timer != null) timer.cancel(); @@ -88,11 +88,11 @@ public void close() { } public GUIUser getUser() { - return session.getUser(); + return guiSession.getUser(); } public void setUser(GUIUser user) { - session.setUser(user); + guiSession.setUser(user); I18N.init(user); } @@ -106,7 +106,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(GUIParameter[] parameters) { - Session.get().session = session; + Session.get().guiSession = session; Session.get().info = session.getInfo(); I18N.init(session.getUser()); @@ -208,11 +208,11 @@ public void setInfo(GUIInfo info) { } public GUISession getSession() { - return session; + return guiSession; } public void setSession(GUISession session) { - this.session = session; + this.guiSession = session; } public String getTenantName() { diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIAttributeSet.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIAttributeSet.java index 195eee84e..7efef0387 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIAttributeSet.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIAttributeSet.java @@ -93,8 +93,8 @@ public void removeAttribute(String name) { public void reorderAttributes(List names) { List newAttrs = new ArrayList<>(); int i = 0; - for (String name : names) { - GUIAttribute att = getAttribute(name); + for (String attributeName : names) { + GUIAttribute att = getAttribute(attributeName); att.setPosition(i++); newAttrs.add(att); } diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIDashlet.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIDashlet.java index 31baf97b1..227ee6f80 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIDashlet.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIDashlet.java @@ -178,9 +178,9 @@ public List getColumnsList() { */ public List getExtendedAttributes() { List set = new ArrayList<>(); - for (String column : getColumnsList()) { - if (column.startsWith("ext_")) - set.add(column.substring(4)); + for (String col : getColumnsList()) { + if (col.startsWith("ext_")) + set.add(col.substring(4)); } return set; } diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIImportFolder.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIImportFolder.java index 374a1b532..51227dee6 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIImportFolder.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIImportFolder.java @@ -290,10 +290,10 @@ public String getDisplayUrl() { if (getPath() != null && !getPath().isEmpty()) url += getPath(); } else if (getProvider().startsWith(PROVIDER_SMB)) { - String path = getPath().replace("/", "\\\\"); - if (!path.startsWith("\\")) - path = "\\" + path; - url += path; + String importFolderPath = getPath().replace("/", "\\\\"); + if (!importFolderPath.startsWith("\\")) + importFolderPath = "\\" + importFolderPath; + url += importFolderPath; } else { url += getProvider(); url += "://"; diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIReminder.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIReminder.java index 7c52ab7ce..5033e60a4 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIReminder.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUIReminder.java @@ -82,7 +82,7 @@ public int compareTo(GUIReminder other) { return -1; else if (this.date != null && other == null) return 1; - else if (this.date == null && other == null) + else if (other == null && this.date == null) return 0; else return this.date.compareTo(other.date); diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUITemplate.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUITemplate.java index 7d486fa48..e091004d9 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUITemplate.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/beans/GUITemplate.java @@ -93,8 +93,8 @@ public void removeAttribute(String name) { public void reorderAttributes(List names) { List newAttrs = new ArrayList<>(); int i = 0; - for (String name : names) { - GUIAttribute att = getAttribute(name); + for (String attributeName : names) { + GUIAttribute att = getAttribute(attributeName); att.setPosition(i++); newAttrs.add(att); } diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/DocumentsDS.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/DocumentsDS.java index 2964fa4e5..26b57e79b 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/DocumentsDS.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/DocumentsDS.java @@ -84,15 +84,11 @@ public DocumentsDS(int status, int max) { setDataURL("data/documents.xml?status=" + status + "&max=" + max); } - public DocumentsDS(String url, String locale, List extendedAttributes) { + public DocumentsDS(String url, List extendedAttributes) { prepareFields(extendedAttributes); setDataURL(url); } - public DocumentsDS(String url, String locale) { - this(url, locale, null); - } - private void prepareFields(List extendedAttributes) { setTitleField("filename"); setRecordXPath("/list/document"); diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EmailAccountsDS.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EmailAccountsDS.java index 4fe434a52..824f1f2c2 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EmailAccountsDS.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EmailAccountsDS.java @@ -2,7 +2,6 @@ import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceImageField; -import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourceTextField; /** @@ -12,14 +11,13 @@ * @since 6.0 */ public class EmailAccountsDS extends DataSource { - public EmailAccountsDS(boolean withEmpty, String type) { + public EmailAccountsDS(String type) { setTitleField("email"); setRecordXPath("/list/account"); DataSourceTextField id = new DataSourceTextField("id"); id.setPrimaryKey(true); DataSourceTextField email = new DataSourceTextField("email"); DataSourceImageField enabled = new DataSourceImageField("eenabled"); - DataSourceIntegerField emails = new DataSourceIntegerField("emails"); setFields(id, email, enabled); setDataURL("data/emailaccounts.xml" + (type != null ? "?type=" + type : "")); diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/ImportFoldersDS.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/ImportFoldersDS.java index 0fa66ec93..693f8d519 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/ImportFoldersDS.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/ImportFoldersDS.java @@ -14,7 +14,7 @@ */ public class ImportFoldersDS extends DataSource { - public ImportFoldersDS(boolean withEmpty) { + public ImportFoldersDS() { setTitleField("src"); setRecordXPath("/list/folder"); DataSourceTextField id = new DataSourceTextField("id"); diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/dialogs/AbstractEmailDialog.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/dialogs/AbstractEmailDialog.java index 6933b1e31..ab6149cba 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/dialogs/AbstractEmailDialog.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/dialogs/AbstractEmailDialog.java @@ -89,7 +89,6 @@ protected void prepareEmail(GUIEmail mail) { // Nothing to do } - @Override public void onDraw() { SectionStack recipientsStack = prepareRecipientsGrid(); @@ -304,9 +303,9 @@ private void addSelectedRecipient(ListGridRecord newRec) { private void handleBackspace(KeyPressEvent event) { if (event.getKeyName().equals("Backspace")) { ListGridRecord selection = recipientsGrid.getSelectedRecord(); - if (selection.getAttribute(EMAIL) == null || selection.getAttribute(EMAIL).toString().equals("")) - if (recipientsGrid.getDataAsRecordList().getLength() > 1) - recipientsGrid.removeSelectedData(); + if ((selection.getAttribute(EMAIL) == null || selection.getAttribute(EMAIL).toString().equals("")) + && recipientsGrid.getDataAsRecordList().getLength() > 1) + recipientsGrid.removeSelectedData(); } } diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/InfoService.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/InfoService.java index 771588964..2fa8a359c 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/InfoService.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/InfoService.java @@ -37,7 +37,8 @@ public interface InfoService extends RemoteService { * * @return array with all the settings * - * @throws InvalidSessionServerException the session does not exist or is expired + * @throws InvalidSessionServerException the session does not exist or is + * expired */ public GUIParameter[] getSessionInfo() throws InvalidSessionServerException; @@ -58,19 +59,23 @@ public interface InfoService extends RemoteService { * * @return if the server has been successfully contacted * - * @throws InvalidSessionServerException the session does not exist or is expired + * @throws InvalidSessionServerException the session does not exist or is + * expired */ public boolean ping() throws InvalidSessionServerException; public static class Instance { - private static InfoServiceAsync instance; + private static InfoServiceAsync inst; + + private Instance() { + } public static InfoServiceAsync get() { - if (instance == null) { - instance = GWT.create(InfoService.class); - ((ServiceDefTarget) instance).setRpcRequestBuilder(new LDRpcRequestBuilder()); + if (inst == null) { + inst = GWT.create(InfoService.class); + ((ServiceDefTarget) inst).setRpcRequestBuilder(new LDRpcRequestBuilder()); } - return instance; + return inst; } } } \ No newline at end of file diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/SecurityService.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/SecurityService.java index 956f0b1a0..a712da094 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/SecurityService.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/services/SecurityService.java @@ -416,13 +416,15 @@ public void replicateUsersSettings(long masterUserId, Long[] userIds, boolean gu void cloneWorkTimes(long srcUserId, long[] userIds, long[] groupIds) throws ServerException; public static class Instance { - private static SecurityServiceAsync instance; + private static SecurityServiceAsync inst; + private Instance() {} + public static SecurityServiceAsync get() { - if (instance == null) { - instance = GWT.create(SecurityService.class); + if (inst == null) { + inst = GWT.create(SecurityService.class); } - return instance; + return inst; } } } \ No newline at end of file diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/util/AwesomeFactory.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/util/AwesomeFactory.java index e9fe63877..0b00e86c2 100644 --- a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/util/AwesomeFactory.java +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/util/AwesomeFactory.java @@ -16,12 +16,20 @@ */ public class AwesomeFactory { private static final String STYLE_COLOR = " style='color: "; + private static final String DIV_CLASS_STATUS_ICON = "