From def3ce690683d8761f11dcba65fa465e02ab26ee Mon Sep 17 00:00:00 2001 From: Will Ezell Date: Thu, 14 Dec 2017 16:43:04 -0500 Subject: [PATCH 1/5] Issue 13194 convert to pojo util (#13195) * #13194 some untested fixes * #13194 use map.getOrDefault methods * #13194 loadObjectResults * #13194 jenkins feedback fixes * #13194 fixes the red * #13194 Replacing ConvertToPojoUtil by DBTransformers * #13194 Removing reflection calls * #13194 Applying sonar suggestions --- .../business/ContentletAPITest.java | 26 +- .../dotcms/util/transform/DBTransformer.java | 16 + .../util/transform/TransformerLocator.java | 124 +++++ .../transform/IdentifierTransformer.java | 47 ++ .../business/IdentifierFactoryImpl.java | 43 +- .../factories/MultiTreeFactory.java | 14 +- .../factories/WebAssetFactory.java | 20 +- .../action/ViewCMSMaintenanceAction.java | 5 +- .../ajax/CMSMaintenanceAjax.java | 5 +- .../containers/business/ContainerAPIImpl.java | 20 +- .../business/ContainerFactoryImpl.java | 21 +- .../transform/ContainerTransformer.java | 60 +++ .../folders/business/FolderFactoryImpl.java | 20 +- .../transform/TemplateTransformer.java | 61 +++ .../links/business/MenuLinkFactoryImpl.java | 4 +- .../portlets/links/factories/LinkFactory.java | 4 +- .../links/transform/LinkTransformer.java | 56 +++ .../business/TemplateFactoryImpl.java | 16 +- .../transform/FolderTransformer.java | 51 ++ .../dotmarketing/util/ConvertToPOJOUtil.java | 438 ------------------ 20 files changed, 518 insertions(+), 533 deletions(-) create mode 100644 dotCMS/src/main/java/com/dotcms/util/transform/DBTransformer.java create mode 100644 dotCMS/src/main/java/com/dotcms/util/transform/TransformerLocator.java create mode 100644 dotCMS/src/main/java/com/dotmarketing/beans/transform/IdentifierTransformer.java create mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/containers/transform/ContainerTransformer.java create mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/folders/transform/TemplateTransformer.java create mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/links/transform/LinkTransformer.java create mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/templates/transform/FolderTransformer.java delete mode 100644 dotCMS/src/main/java/com/dotmarketing/util/ConvertToPOJOUtil.java diff --git a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/contentlet/business/ContentletAPITest.java b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/contentlet/business/ContentletAPITest.java index df423589679c..a1dfbaf81faa 100644 --- a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/contentlet/business/ContentletAPITest.java +++ b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/contentlet/business/ContentletAPITest.java @@ -69,7 +69,6 @@ import com.dotmarketing.portlets.templates.model.Template; import com.dotmarketing.tag.model.Tag; import com.dotmarketing.util.Config; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.Logger; import com.dotmarketing.util.UUIDGenerator; import com.dotmarketing.util.UtilMethods; @@ -88,6 +87,8 @@ import java.io.StringReader; import java.io.StringWriter; import java.nio.charset.Charset; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -2042,10 +2043,8 @@ public void testPubExpDatesFromIdentifier() throws Exception { Identifier ident=APILocator.getIdentifierAPI().find(c1); assertNotNull(ident.getSysPublishDate()); assertNotNull(ident.getSysExpireDate()); - assertTrue(ConvertToPOJOUtil.df.format(d1) - .equals(ConvertToPOJOUtil.df.format(ident.getSysPublishDate()))); - assertTrue(ConvertToPOJOUtil.df.format(d2) - .equals(ConvertToPOJOUtil.df.format(ident.getSysExpireDate()))); + assertTrue(compareDates(d1, ident.getSysPublishDate())); + assertTrue(compareDates(d2, ident.getSysExpireDate())); // if we save another language version for the same identifier // then the identifier should be updated with those dates d3&d4 @@ -2062,15 +2061,13 @@ public void testPubExpDatesFromIdentifier() throws Exception { Identifier ident2=APILocator.getIdentifierAPI().find(c2); assertNotNull(ident2.getSysPublishDate()); assertNotNull(ident2.getSysExpireDate()); - assertTrue(ConvertToPOJOUtil.df.format(d3) - .equals(ConvertToPOJOUtil.df.format(ident2.getSysPublishDate()))); - assertTrue(ConvertToPOJOUtil.df.format(d4) - .equals(ConvertToPOJOUtil.df.format(ident2.getSysExpireDate()))); + assertTrue(compareDates(d3, ident2.getSysPublishDate())); + assertTrue(compareDates(d4, ident2.getSysExpireDate())); // the other contentlet should have the same dates if we read it again Contentlet c11=APILocator.getContentletAPI().find(c1.getInode(), user, false); - assertTrue(ConvertToPOJOUtil.df.format(d3).equals(ConvertToPOJOUtil.df.format(c11.getDateProperty(fieldPubDate.getVelocityVarName())))); - assertTrue(ConvertToPOJOUtil.df.format(d4).equals(ConvertToPOJOUtil.df.format(c11.getDateProperty(fieldExpDate.getVelocityVarName())))); + assertTrue(compareDates(d3, c11.getDateProperty(fieldPubDate.getVelocityVarName()))); + assertTrue(compareDates(d4, c11.getDateProperty(fieldExpDate.getVelocityVarName()))); Thread.sleep(2000); // wait a bit for the index @@ -2083,6 +2080,13 @@ public void testPubExpDatesFromIdentifier() throws Exception { assertEquals(1,APILocator.getContentletAPI().indexCount(q, user, false)); } + private boolean compareDates(Date date1, Date date2) { + + DateFormat dateFormat = SimpleDateFormat + .getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT); + return dateFormat.format(date1).equals(dateFormat.format(date2)); + } + @Test public void rangeQuery() throws Exception { diff --git a/dotCMS/src/main/java/com/dotcms/util/transform/DBTransformer.java b/dotCMS/src/main/java/com/dotcms/util/transform/DBTransformer.java new file mode 100644 index 000000000000..425acea8b4d5 --- /dev/null +++ b/dotCMS/src/main/java/com/dotcms/util/transform/DBTransformer.java @@ -0,0 +1,16 @@ +package com.dotcms.util.transform; + +import java.util.List; + +/** + * Interface that contains the definition that a transformer needs to implement in order to convert + * DB objects into entities(eg. Folder, Template, Containers) + * @param + */ +public interface DBTransformer { + + /** + * @return List of converted objects + */ + List asList(); +} diff --git a/dotCMS/src/main/java/com/dotcms/util/transform/TransformerLocator.java b/dotCMS/src/main/java/com/dotcms/util/transform/TransformerLocator.java new file mode 100644 index 000000000000..0596682e477d --- /dev/null +++ b/dotCMS/src/main/java/com/dotcms/util/transform/TransformerLocator.java @@ -0,0 +1,124 @@ +package com.dotcms.util.transform; + +import com.dotmarketing.beans.Identifier; +import com.dotmarketing.beans.transform.IdentifierTransformer; +import com.dotmarketing.portlets.containers.model.Container; +import com.dotmarketing.portlets.containers.transform.ContainerTransformer; +import com.dotmarketing.portlets.folders.model.Folder; +import com.dotmarketing.portlets.folders.transform.TemplateTransformer; +import com.dotmarketing.portlets.links.model.Link; +import com.dotmarketing.portlets.links.transform.LinkTransformer; +import com.dotmarketing.portlets.templates.model.Template; +import com.dotmarketing.portlets.templates.transform.FolderTransformer; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; + +/** + * Factory class used to instantiate DBTransformer objects + * Default DBTransformer objects supported so far are: FolderTransformer, TemplateTransformer, + * ContainerTransformer, LinkTransformer and IdentifierTransformer + * However, new implementations can be included calling the addTransformer + * method and removed calling removeTransformer. + * @author nollymar + */ +public class TransformerLocator { + + private TransformerLocator() { + + } + + /** + * Map that contains DbTransformer implementations + */ + private static Map>, DBTransformer>> transformerMapping = new ConcurrentHashMap<>(); + + static { + transformerMapping.put (Folder.class, TransformerLocator::createFolderTransformer); + transformerMapping.put (Template.class, TransformerLocator::createTemplateTransformer); + transformerMapping.put (Container.class, TransformerLocator::createContainerTransformer); + transformerMapping.put (Link.class, TransformerLocator::createLinkTransformer); + transformerMapping.put (Identifier.class, TransformerLocator::createIdentifierTransformer); + } + + public static DBTransformer createDBTransformer(List> list, Class clazz) { + DBTransformer transformer = null; + + if (transformerMapping.containsKey(clazz)){ + transformer = transformerMapping.get(clazz).apply(list); + } + return transformer; + } + + /** + * Extends default DBTransformer map + * @param clazz Class which DB results will be transformed to + * @param transformerFunction DBTransformer that contains the implementation + */ + public static void addTransformer(Class clazz, + Function>, DBTransformer> transformerFunction) { + transformerMapping.put(clazz, transformerFunction); + } + + /** + * Remove a DBTransformer implementation from the map given the class as a key + * @param clazz + */ + public static void removeTransformer(Class clazz){ + transformerMapping.remove(clazz); + } + + /** + * Creates a DBTransformer for Folder objects + * @param initList List of DB results to be transformed + * @return + */ + public static FolderTransformer createFolderTransformer(List> initList) { + + return new FolderTransformer(initList); + } + + /** + * Creates a DBTransformer for Template objects + * @param initList List of DB results to be transformed + * @return + */ + public static TemplateTransformer createTemplateTransformer( + List> initList) { + + return new TemplateTransformer(initList); + } + + /** + * Creates a DBTransformer for Container objects + * @param initList List of DB results to be transformed + * @return + */ + public static ContainerTransformer createContainerTransformer( + List> initList) { + + return new ContainerTransformer(initList); + } + + /** + * Creates a DBTransformer for Link objects + * @param initList List of DB results to be transformed + * @return + */ + public static LinkTransformer createLinkTransformer(List> initList) { + + return new LinkTransformer(initList); + } + + /** + * Creates a DBTransformer for Identifier objects + * @param initList List of DB results to be transformed + * @return + */ + public static IdentifierTransformer createIdentifierTransformer( + List> initList) { + + return new IdentifierTransformer(initList); + } +} diff --git a/dotCMS/src/main/java/com/dotmarketing/beans/transform/IdentifierTransformer.java b/dotCMS/src/main/java/com/dotmarketing/beans/transform/IdentifierTransformer.java new file mode 100644 index 000000000000..4969f08e4dd5 --- /dev/null +++ b/dotCMS/src/main/java/com/dotmarketing/beans/transform/IdentifierTransformer.java @@ -0,0 +1,47 @@ +package com.dotmarketing.beans.transform; + +import com.dotcms.util.transform.DBTransformer; +import com.dotmarketing.beans.Identifier; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import org.jetbrains.annotations.NotNull; + +/** + * DBTransformer that converts DB objects into Identifier instances + */ +public class IdentifierTransformer implements DBTransformer { + final List list; + + + public IdentifierTransformer(List> initList){ + List newList = new ArrayList<>(); + if (initList != null){ + for(Map map : initList){ + newList.add(transform(map)); + } + } + + this.list = newList; + } + + @Override + public List asList() { + + return this.list; + } + + @NotNull + private static Identifier transform(Map map) { + final Identifier i = new Identifier(); + i.setAssetName((String) map.get("asset_name")); + i.setAssetType((String) map.get("asset_type")); + i.setHostId((String) map.get("host_inode")); + i.setId((String) map.get("id")); + i.setParentPath((String) map.get("parent_path")); + i.setSysPublishDate((Date) map.get("syspublish_date")); + i.setSysExpireDate((Date) map.get("sysexpire_date")); + return i; + } +} diff --git a/dotCMS/src/main/java/com/dotmarketing/business/IdentifierFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/business/IdentifierFactoryImpl.java index 113979652450..13857ebeb2c5 100644 --- a/dotCMS/src/main/java/com/dotmarketing/business/IdentifierFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/business/IdentifierFactoryImpl.java @@ -1,6 +1,7 @@ package com.dotmarketing.business; import com.dotcms.contenttype.model.type.BaseContentType; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.Host; import com.dotmarketing.beans.Identifier; import com.dotmarketing.beans.Inode; @@ -18,7 +19,6 @@ import com.dotmarketing.portlets.links.model.Link; import com.dotmarketing.portlets.structure.model.Structure; import com.dotmarketing.portlets.workflows.model.WorkflowTask; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.InodeUtils; import com.dotmarketing.util.Logger; import com.dotmarketing.util.Parameter; @@ -28,7 +28,6 @@ import java.io.IOException; import java.io.StringWriter; import java.sql.Connection; -import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -64,11 +63,9 @@ protected List findByURIPattern(final String assetType, String uri, dc.addParam(host.getIdentifier()); dc.addParam(assetType); - try { - return ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + return TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + } @Override @@ -156,11 +153,9 @@ protected Identifier findByURI(final String siteId, String uri) throws DotDataEx dc.addParam(siteId); List results = null; - try { - results = ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + results = TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + if (results != null && !results.isEmpty()){ identifier = results.get(0); @@ -186,11 +181,9 @@ protected List findByParentPath(final String siteId, String parent_p dc.setSQL("select * from identifier where parent_path = ? and host_inode = ?"); dc.addParam(parent_path); dc.addParam(siteId); - try { - return ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + return TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + } @Override @@ -204,11 +197,9 @@ protected Identifier loadFromDb(String identifier) throws DotDataException, DotS dc.addParam(identifier); List results = null; - try { - results = ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + results = TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + return (results != null && !results.isEmpty())?results.get(0):null; @@ -389,11 +380,9 @@ protected List loadAllIdentifiers() throws DotDataException { DotConnect dc = new DotConnect(); dc.setSQL("select * from identifier"); - try { - return ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + return TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + } @Override diff --git a/dotCMS/src/main/java/com/dotmarketing/factories/MultiTreeFactory.java b/dotCMS/src/main/java/com/dotmarketing/factories/MultiTreeFactory.java index 93ad2e75b771..8af3841dd06a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/factories/MultiTreeFactory.java +++ b/dotCMS/src/main/java/com/dotmarketing/factories/MultiTreeFactory.java @@ -1,8 +1,9 @@ package com.dotmarketing.factories; -import com.dotmarketing.util.ConvertToPOJOUtil; +import com.dotcms.util.transform.DBTransformer; +import com.dotcms.util.transform.TransformerLocator; import java.sql.SQLException; -import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -477,12 +478,19 @@ public static java.util.List getChildrenClass(Identifier p1, Identifier p2, Clas dc.addParam(p1.getId()); dc.addParam(p2.getId()); - return ConvertToPOJOUtil.convertDotConnectMapToPOJO(dc.loadResults(), c); + DBTransformer transformer = TransformerLocator + .createDBTransformer(dc.loadObjectResults(), c); + + if (transformer != null){ + return transformer.asList(); + } } catch (Exception e) { Logger.error(MultiTreeFactory.class, "getChildrenClass failed:" + e, e); throw new DotRuntimeException(e.toString()); } + + return Collections.emptyList(); } public static java.util.List getChildrenClass(Inode p1, Inode p2, Class c, String orderBy) { diff --git a/dotCMS/src/main/java/com/dotmarketing/factories/WebAssetFactory.java b/dotCMS/src/main/java/com/dotmarketing/factories/WebAssetFactory.java index 71307db18f34..57e6b0c71deb 100644 --- a/dotCMS/src/main/java/com/dotmarketing/factories/WebAssetFactory.java +++ b/dotCMS/src/main/java/com/dotmarketing/factories/WebAssetFactory.java @@ -8,6 +8,8 @@ import com.dotcms.api.system.event.Visibility; import com.dotcms.api.system.event.verifier.ExcludeOwnerVerifierBean; import com.dotcms.repackage.com.google.common.base.Strings; +import com.dotcms.util.transform.DBTransformer; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.Host; import com.dotmarketing.beans.Identifier; import com.dotmarketing.beans.Inode; @@ -47,7 +49,6 @@ import com.dotmarketing.portlets.templates.model.Template; import com.dotmarketing.services.ContainerServices; import com.dotmarketing.services.TemplateServices; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.InodeUtils; import com.dotmarketing.util.Logger; import com.dotmarketing.util.PaginatedArrayList; @@ -56,6 +57,7 @@ import com.liferay.portal.model.User; import com.liferay.portal.struts.ActionException; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -831,8 +833,18 @@ public static List getAssetsWorkingWithPermission(Class c, int limit, dc.setMaxRows(internalLimit); PermissionAPI permAPI = APILocator.getPermissionAPI(); - List list = ConvertToPOJOUtil - .convertDotConnectMapToPOJO(dc.loadResults(), c); + + DBTransformer transformer = TransformerLocator + .createDBTransformer(dc.loadObjectResults(), c); + + List list; + + if (transformer != null){ + list = (List) transformer.asList(); + }else{ + return Collections.emptyList(); + } + toReturn.addAll(permAPI.filterCollection(list, PermissionAPI.PERMISSION_READ, false, user)); if(limit > 0 && toReturn.size() >= limit + offset) done = true; @@ -857,7 +869,7 @@ else if(list.size() < internalLimit) Logger.warn(WebAssetFactory.class, "getAssetsPerConditionWithPermission failed:" + e, e); } - return new ArrayList<>(); + return Collections.emptyList(); } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/action/ViewCMSMaintenanceAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/action/ViewCMSMaintenanceAction.java index e6239aa4ade4..5e3639f5eee8 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/action/ViewCMSMaintenanceAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/action/ViewCMSMaintenanceAction.java @@ -16,6 +16,7 @@ import com.dotcms.repackage.org.apache.struts.action.ActionForm; import com.dotcms.repackage.org.apache.struts.action.ActionForward; import com.dotcms.repackage.org.apache.struts.action.ActionMapping; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.Clickstream; import com.dotmarketing.beans.Clickstream404; import com.dotmarketing.beans.ClickstreamRequest; @@ -52,7 +53,6 @@ import com.dotmarketing.util.AdminLogger; import com.dotmarketing.util.Config; import com.dotmarketing.util.ConfigUtils; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.HibernateCollectionConverter; import com.dotmarketing.util.HibernateMapConverter; import com.dotmarketing.util.ImportExportUtil; @@ -655,7 +655,8 @@ else if(Identifier.class.equals(clazz)){ } if(Identifier.class.equals(clazz)){ - _list = ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); + _list = TransformerLocator + .createIdentifierTransformer(dc.loadObjectResults()).asList(); }else{ _list = _dh.list(); } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/ajax/CMSMaintenanceAjax.java b/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/ajax/CMSMaintenanceAjax.java index be240f4173bd..e8a26e285dfe 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/ajax/CMSMaintenanceAjax.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/cmsmaintenance/ajax/CMSMaintenanceAjax.java @@ -9,6 +9,7 @@ import com.dotcms.repackage.com.thoughtworks.xstream.mapper.Mapper; import com.dotcms.repackage.org.directwebremoting.WebContextFactory; import com.dotcms.util.CloseUtils; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.Clickstream; import com.dotmarketing.beans.ClickstreamRequest; import com.dotmarketing.beans.Identifier; @@ -48,7 +49,6 @@ import com.dotmarketing.portlets.workflows.util.WorkflowImportExportUtil; import com.dotmarketing.tag.model.TagInode; import com.dotmarketing.util.ConfigUtils; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.HibernateCollectionConverter; import com.dotmarketing.util.HibernateMapConverter; import com.dotmarketing.util.Logger; @@ -529,7 +529,8 @@ public void createXMLFiles() throws ServletException, IOException, DotDataExcept } if(Identifier.class.equals(clazz)){ - list = ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); + list = TransformerLocator + .createIdentifierTransformer(dc.loadObjectResults()).asList(); }else{ list = dh.list(); } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerAPIImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerAPIImpl.java index cc683b335760..369d51d0b00b 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerAPIImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerAPIImpl.java @@ -3,6 +3,7 @@ import com.dotcms.business.CloseDBIfOpened; import com.dotcms.business.WrapInTransaction; import com.dotcms.contenttype.model.type.ContentType; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.ContainerStructure; import com.dotmarketing.beans.Host; import com.dotmarketing.beans.Identifier; @@ -30,11 +31,9 @@ import com.dotmarketing.portlets.structure.model.Structure; import com.dotmarketing.portlets.templates.model.Template; import com.dotmarketing.services.ContainerServices; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.UtilMethods; import com.dotmarketing.util.WebKeys; import com.liferay.portal.model.User; -import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; @@ -192,11 +191,9 @@ private String getAppendToContainerTitle(final String containerTitle, Host desti dc.setSQL(sql); dc.addParam(destination.getIdentifier()); - try { - containers = ConvertToPOJOUtil.convertDotConnectMapToContainer(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + containers = TransformerLocator.createContainerTransformer(dc.loadObjectResults()).asList(); + boolean isContainerTitle = false; @@ -269,11 +266,10 @@ public List getContainersInTemplate(final Template parentTemplate) "and template_containers.template_id = ? "); dc.addParam(parentTemplate.getIdentifier()); - try{ - identifiers = ConvertToPOJOUtil.convertDotConnectMapToIdentifier(dc.loadResults()); - }catch(ParseException e){ - throw new DotDataException(e); - } + + identifiers = TransformerLocator.createIdentifierTransformer(dc.loadObjectResults()).asList(); + + final List containers = new ArrayList<>(); for (Identifier id : identifiers) { diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerFactoryImpl.java index f6515e619641..0810219868b4 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/business/ContainerFactoryImpl.java @@ -2,6 +2,7 @@ import com.dotcms.contenttype.business.ContentTypeAPI; import com.dotcms.contenttype.model.type.ContentType; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.ContainerStructure; import com.dotmarketing.beans.Host; import com.dotmarketing.beans.Inode; @@ -20,13 +21,11 @@ import com.dotmarketing.exception.DotRuntimeException; import com.dotmarketing.exception.DotSecurityException; import com.dotmarketing.portlets.containers.model.Container; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.InodeUtils; import com.dotmarketing.util.Logger; import com.dotmarketing.util.PaginatedArrayList; import com.dotmarketing.util.UtilMethods; import com.liferay.portal.model.User; -import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -66,11 +65,9 @@ public List findContainersUnder(Host parentPermissionable) throws Dot sql.append('\''); dc.setSQL(sql.toString()); - try { - return ConvertToPOJOUtil.convertDotConnectMapToContainer(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + return TransformerLocator.createContainerTransformer(dc.loadObjectResults()).asList(); + } @SuppressWarnings("unchecked") @@ -92,11 +89,9 @@ public List findAllContainers() throws DotDataException { sql.append(".title"); dc.setSQL(sql.toString()); - try { - return ConvertToPOJOUtil.convertDotConnectMapToContainer(dc.loadResults()); - } catch (ParseException e) { - throw new DotDataException(e); - } + + return TransformerLocator.createContainerTransformer(dc.loadObjectResults()).asList(); + } @Override @SuppressWarnings("unchecked") @@ -264,7 +259,7 @@ public List findContainers(User user, boolean includeArchived, while(!done) { dc.setStartRow(internalOffset); dc.setMaxRows(internalLimit); - resultList = ConvertToPOJOUtil.convertDotConnectMapToContainer(dc.loadResults()); + resultList = TransformerLocator.createContainerTransformer(dc.loadObjectResults()).asList(); PermissionAPI permAPI = APILocator.getPermissionAPI(); toReturn.addAll(permAPI.filterCollection(resultList, PermissionAPI.PERMISSION_READ, false, user)); if(countLimit > 0 && toReturn.size() >= countLimit + offset) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/containers/transform/ContainerTransformer.java b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/transform/ContainerTransformer.java new file mode 100644 index 000000000000..974ad07949c4 --- /dev/null +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/containers/transform/ContainerTransformer.java @@ -0,0 +1,60 @@ +package com.dotmarketing.portlets.containers.transform; + +import com.dotcms.util.transform.DBTransformer; +import com.dotmarketing.portlets.containers.model.Container; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import org.jetbrains.annotations.NotNull; + +/** + * DBTransformer that converts DB objects into Container instances + */ +public class ContainerTransformer implements DBTransformer { + final List list; + + + public ContainerTransformer(List> initList){ + List newList = new ArrayList<>(); + if (initList != null){ + for(Map map : initList){ + newList.add(transform(map)); + } + } + + this.list = newList; + } + + @Override + public List asList() { + + return this.list; + } + + @NotNull + private static Container transform(Map map) { + final Container container; + container = new Container(); + container.setInode((String) map.get("inode")); + container.setOwner((String) map.get("owner")); + container.setIDate((Date) map.get("idate")); + container.setCode((String) map.get("code")); + container.setPreLoop((String) map.get("pre_loop")); + container.setPostLoop((String) map.get("post_loop")); + container.setShowOnMenu((Boolean) map.getOrDefault("show_on_menu",false)); + container.setTitle((String) map.get("title")); + container.setModDate((Date) map.get("mod_date")); + container.setModUser((String) map.get("mod_user")); + container.setSortOrder((Integer) map.getOrDefault("sort_order",0)); + container.setFriendlyName((String) map.get("friendly_name")); + container.setMaxContentlets((Integer) map.getOrDefault("max_contentlets",0)); + container.setUseDiv((Boolean) map.getOrDefault("use_div",false)); + container.setStaticify((Boolean) map.getOrDefault("staticify",false)); + container.setSortContentletsBy((String) map.get("sort_contentlets_by")); + container.setLuceneQuery((String) map.get("lucene_query")); + container.setNotes((String) map.get("notes")); + container.setIdentifier((String) map.get("identifier")); + return container; + } +} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/folders/business/FolderFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/folders/business/FolderFactoryImpl.java index 8afd19c23e12..87979088fd81 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/folders/business/FolderFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/folders/business/FolderFactoryImpl.java @@ -5,6 +5,8 @@ import com.dotcms.repackage.org.apache.oro.text.regex.Pattern; import com.dotcms.repackage.org.apache.oro.text.regex.Perl5Compiler; import com.dotcms.repackage.org.apache.oro.text.regex.Perl5Matcher; +import com.dotcms.util.transform.DBTransformer; +import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.beans.Host; import com.dotmarketing.beans.Identifier; import com.dotmarketing.beans.Inode; @@ -37,13 +39,11 @@ import com.dotmarketing.portlets.links.model.Link; import com.dotmarketing.portlets.structure.model.Structure; import com.dotmarketing.util.AssetsComparator; -import com.dotmarketing.util.ConvertToPOJOUtil; import com.dotmarketing.util.InodeUtils; import com.dotmarketing.util.Logger; import com.dotmarketing.util.UtilMethods; import com.liferay.portal.model.User; import java.io.IOException; -import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -170,8 +170,8 @@ private List getSubFolders(Boolean showOnMenu, String path, final String dc.addParam(hostId); try{ - return ConvertToPOJOUtil.convertDotConnectMapToFolder(dc.loadResults()); - }catch(ParseException | DotDataException e){ + return TransformerLocator.createFolderTransformer(dc.loadObjectResults()).asList(); + }catch(DotDataException e){ Logger.error(this, e.getMessage(), e); } @@ -225,7 +225,7 @@ protected Folder findFolderByPath(String path, Host host) throws DotDataExceptio dc.addParam(parentPath.toLowerCase()); dc.addParam(hostId); - result = ConvertToPOJOUtil.convertDotConnectMapToFolder(dc.loadResults()); + result = TransformerLocator.createFolderTransformer(dc.loadObjectResults()).asList(); if (result != null && !result.isEmpty()){ folder = result.get(0); @@ -274,7 +274,8 @@ protected Folder findFolderByPath(String path, Host host) throws DotDataExceptio dc.addParam(parentPath.toLowerCase()); dc.addParam(hostId); - result = ConvertToPOJOUtil.convertDotConnectMapToFolder(dc.loadResults()); + result = TransformerLocator.createFolderTransformer(dc.loadObjectResults()) + .asList(); if (result != null && !result.isEmpty()){ folder = result.get(0); @@ -1119,7 +1120,12 @@ protected List getChildrenClass ( Identifier identifier, Class clazz, } try { - return ConvertToPOJOUtil.convertDotConnectMapToPOJO(dc.loadResults(), clazz); + DBTransformer transformer = TransformerLocator.createDBTransformer(dc.loadObjectResults(), clazz); + + if (transformer != null){ + return transformer.asList(); + } + }catch(Exception e){ Logger.warn(this, e.getMessage(), e); } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/folders/transform/TemplateTransformer.java b/dotCMS/src/main/java/com/dotmarketing/portlets/folders/transform/TemplateTransformer.java new file mode 100644 index 000000000000..cb4b794b7d67 --- /dev/null +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/folders/transform/TemplateTransformer.java @@ -0,0 +1,61 @@ +package com.dotmarketing.portlets.folders.transform; + +import com.dotcms.util.transform.DBTransformer; +import com.dotmarketing.portlets.templates.model.Template; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import org.jetbrains.annotations.NotNull; + +/** + * DBTransformer that converts DB objects into Template instances + */ +public class TemplateTransformer implements DBTransformer { + final List