Skip to content

Commit

Permalink
#14024 fixes (#14069)
Browse files Browse the repository at this point in the history
* #14024 fixes

* #14024 rework on original fix

* #14024 add suggestions from Code Review

* #14024 make variables naming more consistent
  • Loading branch information
joseorsini authored and jtesser committed Apr 26, 2018
1 parent 36b0580 commit d383d2a
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -791,13 +791,29 @@ protected List<Contentlet> findAllUserVersions(Identifier identifier) throws Dot
return cons;
}

@Override
protected List<Contentlet> findAllVersions(Identifier identifier) throws DotDataException, DotStateException, DotSecurityException {
return findAllVersions(identifier, true);
}

@Override
protected List<Contentlet> findAllVersions(Identifier identifier) throws DotDataException, DotStateException, DotSecurityException {
protected List<Contentlet> findAllVersions(Identifier identifier, boolean bringOldVersions) throws DotDataException, DotStateException, DotSecurityException {
if(!InodeUtils.isSet(identifier.getInode()))
return new ArrayList<Contentlet>();

DotConnect dc = new DotConnect();
dc.setSQL("SELECT inode FROM contentlet WHERE identifier=? order by mod_date desc");
StringBuffer query = new StringBuffer();

if(bringOldVersions) {
query.append("SELECT inode FROM contentlet WHERE identifier=? order by mod_date desc");

} else {
query.append("SELECT inode FROM contentlet c INNER JOIN contentlet_version_info cvi "
+ "ON (c.inode = cvi.working_inode OR c.inode = cvi.live_inode) "
+ "WHERE c.identifier=? order by c.mod_date desc ");
}

dc.setSQL(query.toString());
dc.addObject(identifier.getId());
List<Map<String,Object>> list=dc.loadObjectResults();
ArrayList<String> inodes=new ArrayList<String>(list.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3777,8 +3777,14 @@ public List<Contentlet> findAllUserVersions(Identifier identifier,User user, boo

@CloseDBIfOpened
@Override
public List<Contentlet> findAllVersions(Identifier identifier, User user,boolean respectFrontendRoles) throws DotSecurityException,DotDataException, DotStateException {
List<Contentlet> contentlets = contentFactory.findAllVersions(identifier);
public List<Contentlet> findAllVersions(Identifier identifier, User user, boolean respectFrontendRoles) throws DotSecurityException,DotDataException, DotStateException {
return findAllVersions(identifier, true, user, respectFrontendRoles);
}

@CloseDBIfOpened
@Override
public List<Contentlet> findAllVersions(Identifier identifier, boolean bringOldVersions, User user, boolean respectFrontendRoles) throws DotSecurityException,DotDataException, DotStateException {
List<Contentlet> contentlets = contentFactory.findAllVersions(identifier, bringOldVersions);
if(contentlets.isEmpty())
return new ArrayList<Contentlet>();
if(!permissionAPI.doesUserHavePermission(contentlets.get(0), PermissionAPI.PERMISSION_READ, user, respectFrontendRoles)){
Expand Down Expand Up @@ -5089,7 +5095,7 @@ private Contentlet copyContentlet(Contentlet contentletToCopy, Host host, Folder
List<Contentlet> versionsToMarkWorking = new ArrayList<Contentlet>();
Map<String, Map<String, Contentlet>> contentletsToCopyRules = Maps.newHashMap();

versionsToCopy.addAll(findAllVersions(APILocator.getIdentifierAPI().find(contentletToCopy.getIdentifier()), user, respectFrontendRoles));
versionsToCopy.addAll(findAllVersions(APILocator.getIdentifierAPI().find(contentletToCopy.getIdentifier()), false, user, respectFrontendRoles));

// we need to save the versions from older-to-newer to make sure the last save
// is the current version
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1091,10 +1091,10 @@ public Contentlet checkin(Contentlet currentContentlet, ContentletRelationships
* @throws DotSecurityException
*/
public void restoreVersion(Contentlet contentlet, User user, boolean respectFrontendRoles) throws DotSecurityException, DotContentletStateException, DotDataException;

/**
* Retrieves all versions for a contentlet identifier
* Note this method should not be used currently because it could pull too many versions.
* Note: This method could pull too many versions.
* @param identifier
* @param user
* @param respectFrontendRoles
Expand All @@ -1103,8 +1103,26 @@ public Contentlet checkin(Contentlet currentContentlet, ContentletRelationships
* @throws DotDataException
* @throws DotStateException if the identifier is for contentlet
*/

public List<Contentlet> findAllVersions(Identifier identifier, User user, boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException;


/**
* Retrieves all versions for a contentlet identifier.
* Note: This method could pull too many versions.
* @param identifier - Identifier object that belongs to a contentlet
* @param bringOldVersions - boolean value which determines if old versions (non-live, non-working
* should be brought here). @see copyContentlet method, which requires passing in only live/working
* versions of contents to be copied
* @param user - User in context who has triggered this call.
* @param respectFrontendRoles - For permissions validations
* @return
* @throws DotSecurityException
* @throws DotDataException
* @throws DotStateException if the identifier is for contentlet
*/

public List<Contentlet> findAllVersions(Identifier identifier, boolean bringOldVersions, User user, boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException;

/**
* Retrieves all versions for a contentlet identifier checked in by a real user meaning not the system user
* @param identifier
Expand All @@ -1115,6 +1133,7 @@ public Contentlet checkin(Contentlet currentContentlet, ContentletRelationships
* @throws DotDataException
* @throws DotStateException if the identifier is for contentlet
*/

public List<Contentlet> findAllUserVersions(Identifier identifier, User user, boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ public List<Contentlet> findAllUserVersions(Identifier identifier,User user, boo
}

@Override
public List<Contentlet> findAllVersions(Identifier identifier, User user,boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException {
public List<Contentlet> findAllVersions(Identifier identifier, User user, boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException {
for(ContentletAPIPreHook pre : preHooks){
boolean preResult = pre.findAllVersions(identifier, user, respectFrontendRoles);
if(!preResult){
Expand All @@ -668,6 +668,22 @@ public List<Contentlet> findAllVersions(Identifier identifier, User user,boolean
return c;
}

@Override
public List<Contentlet> findAllVersions(Identifier identifier, boolean bringOldVersions, User user, boolean respectFrontendRoles) throws DotSecurityException, DotDataException, DotStateException {
for(ContentletAPIPreHook pre : preHooks){
boolean preResult = pre.findAllVersions(identifier, bringOldVersions, user, respectFrontendRoles);
if(!preResult){
Logger.error(this, "The following prehook failed " + pre.getClass().getName());
throw new DotRuntimeException("The following prehook failed " + pre.getClass().getName());
}
}
List<Contentlet> c = conAPI.findAllVersions(identifier, bringOldVersions, user, respectFrontendRoles);
for(ContentletAPIPostHook post : postHooks){
post.findAllVersions(identifier, bringOldVersions, user, respectFrontendRoles,c);
}
return c;
}

@Override
public List<Contentlet> findByStructure(Structure structure, User user, boolean respectFrontendRoles, int limit, int offset) throws DotDataException, DotSecurityException {
for(ContentletAPIPreHook pre : preHooks){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,19 @@ public default void restoreVersion(Contentlet contentlet, User user, boolean res
* @param returnValue - value returned by primary API Method
*/
public default void findAllVersions(Identifier identifier, User user, boolean respectFrontendRoles,List<Contentlet> returnValue){}

/**
* Retrieves all versions for a contentlet identifier
* Note this method should not be used currently because it could pull too many versions.
* @param identifier - Identifier object that belongs to a contentlet
* @param bringOldVersions - boolean value which determines if old versions (non-live, non-working
* should be brought here). @see copyContentlet method, which requires passing in only live/working
* versions of contents to be copied
* @param user - User in context who has triggered this call.
* @param respectFrontendRoles - For permissions validations
* @param returnValue - value returned by primary API Method
*/
public default void findAllVersions(Identifier identifier, boolean bringOldVersions, User user, boolean respectFrontendRoles,List<Contentlet> returnValue){}

/**
* Retrieves all versions for a contentlet identifier checked in by a real user meaning not the system user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,21 @@ public default boolean restoreVersion(Contentlet contentlet, User user, boolean
public default boolean findAllVersions(Identifier identifier, User user, boolean respectFrontendRoles){
return true;
}

/**
* Retrieves all versions for a contentlet identifier.
* Note: This method could pull too many versions.
* @param identifier - Identifier object that belongs to a contentlet
* @param bringOldVersions - boolean value which determines if old versions (non-live, non-working
* should be brought here). @see copyContentlet method, which requires passing in only live/working
* versions of contents to be copied
* @param user - User in context who has triggered this call.
* @param respectFrontendRoles - For permissions validations
* @return
*/
public default boolean findAllVersions(Identifier identifier, boolean bringOldVersions, User user, boolean respectFrontendRoles){
return true;
}

/**
* Retrieves all versions for a contentlet identifier checked in by a real user meaning not the system user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,14 +227,23 @@ public abstract class ContentletFactory {
/**
* Retrieves all versions for a contentlet identifier
* @param identifier
* @param user
* @param respectFrontendRoles
* @return
* @throws DotDataException
* @throws DotSecurityException
*/
protected abstract List<Contentlet> findAllVersions(Identifier identifier) throws DotDataException, DotSecurityException;

/**
* Retrieves all versions for a contentlet identifier.
* @param identifier
* @param bringOldVersions Include old versions of contents, so it will return only live/working
* versions of contents, regardless of their languages
* @return
* @throws DotDataException
* @throws DotSecurityException
*/
protected abstract List<Contentlet> findAllVersions(Identifier identifier, boolean bringOldVersions) throws DotDataException, DotSecurityException;

/**
* Converts a "fat" (legacy) contentlet into a new contentlet.
* @param Fat contentlet to be converted.
Expand Down

0 comments on commit d383d2a

Please sign in to comment.