Skip to content

Commit

Permalink
#13208 merge master done
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonathan authored and Jonathan committed Dec 15, 2017
2 parents 71bac80 + 4552600 commit dd52111
Show file tree
Hide file tree
Showing 22 changed files with 519 additions and 535 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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 {
Expand Down
16 changes: 16 additions & 0 deletions dotCMS/src/main/java/com/dotcms/util/transform/DBTransformer.java
Original file line number Diff line number Diff line change
@@ -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 <T>
*/
public interface DBTransformer<T> {

/**
* @return List of converted objects
*/
List<T> asList();
}
124 changes: 124 additions & 0 deletions dotCMS/src/main/java/com/dotcms/util/transform/TransformerLocator.java
Original file line number Diff line number Diff line change
@@ -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<Class, Function<List<Map<String, Object>>, 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<Map<String, Object>> 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<List<Map<String, Object>>, 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> initList) {

return new IdentifierTransformer(initList);
}
}
Original file line number Diff line number Diff line change
@@ -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<Identifier> list;


public IdentifierTransformer(List<Map<String, Object>> initList){
List<Identifier> newList = new ArrayList<>();
if (initList != null){
for(Map<String, Object> map : initList){
newList.add(transform(map));
}
}

this.list = newList;
}

@Override
public List<Identifier> asList() {

return this.list;
}

@NotNull
private static Identifier transform(Map<String, Object> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -64,11 +63,9 @@ protected List<Identifier> 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
Expand Down Expand Up @@ -156,11 +153,9 @@ protected Identifier findByURI(final String siteId, String uri) throws DotDataEx
dc.addParam(siteId);

List<Identifier> 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);
Expand All @@ -186,11 +181,9 @@ protected List<Identifier> 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
Expand All @@ -204,11 +197,9 @@ protected Identifier loadFromDb(String identifier) throws DotDataException, DotS
dc.addParam(identifier);

List<Identifier> 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;

Expand Down Expand Up @@ -389,11 +380,9 @@ protected List<Identifier> 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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
Loading

0 comments on commit dd52111

Please sign in to comment.