*/
@SuppressWarnings("unchecked")
public static boolean publishAsset(Inode webAsset, User user, boolean respectFrontendRoles, boolean isNewVersion) throws WebAssetException, DotSecurityException, DotDataException
{
ContentletAPI conAPI = APILocator.getContentletAPI();
HostAPI hostAPI = APILocator.getHostAPI();
//http://jira.dotmarketing.net/browse/DOTCMS-6325
if (user != null &&
((webAsset instanceof Folder)?
!permissionAPI.doesUserHavePermission(webAsset, PermissionAPI.PERMISSION_EDIT, user):
!permissionAPI.doesUserHavePermission(webAsset, PERMISSION_PUBLISH, user))) {
Logger.debug(PublishFactory.class, "publishAsset: user = " + user.getEmailAddress() + ", don't have permissions to publish: " + webAsset);
return false;
}
if (webAsset instanceof WebAsset)
{
try {
WebAssetFactory.publishAsset((WebAsset) webAsset, user, isNewVersion);
} catch (Exception e) {
Logger.error(PublishFactory.class, "publishAsset: Failed to publish the asset.", e);
}
}
if (webAsset instanceof com.dotmarketing.portlets.files.model.File)
{
// publishing a file
LiveCache.removeAssetFromCache((WebAsset)webAsset);
LiveCache.addToLiveAssetToCache((WebAsset) webAsset);
WorkingCache.removeAssetFromCache((WebAsset)webAsset);
WorkingCache.addToWorkingAssetToCache((WebAsset) webAsset);
if(RefreshMenus.shouldRefreshMenus((com.dotmarketing.portlets.files.model.File)webAsset)){
com.dotmarketing.menubuilders.RefreshMenus.deleteMenu((WebAsset)webAsset);
Identifier ident=APILocator.getIdentifierAPI().find(webAsset);
CacheLocator.getNavToolCache().removeNavByPath(ident.getHostId(), ident.getParentPath());
}
}
if (webAsset instanceof Container) {
//saves to live folder under velocity
ContainerServices.invalidate((Container)webAsset);
}
if (webAsset instanceof Template) {
Logger.debug(PublishFactory.class, "*****I'm a Template -- Publishing");
//gets all identifier children
java.util.List<Container> identifiers = APILocator.getTemplateAPI().getContainersInTemplate((Template)webAsset, APILocator.getUserAPI().getSystemUser(), false);
java.util.Iterator<Container> identifiersIter = identifiers.iterator();
while (identifiersIter.hasNext()) {
Container container =(Container) identifiersIter.next();
Logger.debug(PublishFactory.class, "*****I'm a Template -- Publishing my Container Child=" + container.getInode());
if(!container.isLive()){
publishAsset(container,user, respectFrontendRoles, isNewVersion);
}
}
//Clean-up the cache for this template
CacheLocator.getTemplateCache().remove( webAsset.getInode() );
//writes the template to a live directory under velocity folder
TemplateServices.invalidate((Template)webAsset);
}
if (webAsset instanceof HTMLPage)
{
Logger.debug(PublishFactory.class, "*****I'm an HTML Page -- Publishing");
List relatedNotPublished = new ArrayList();
relatedNotPublished = getUnpublishedRelatedAssets(webAsset, relatedNotPublished, user, respectFrontendRoles);
//Publishing related pieces of content
for(Object asset : relatedNotPublished) {
if(asset instanceof Contentlet) {
Logger.debug(PublishFactory.class, "*****I'm an HTML Page -- Publishing my Contentlet Child=" + ((Contentlet)asset).getInode());
try {
Contentlet c = (Contentlet)asset;
if(!APILocator.getWorkflowAPI().findSchemeForStruct(c.getStructure()).isMandatory()){
conAPI.publish((Contentlet)asset, user, false);
}
} catch (DotSecurityException e) {
//User has no permission to publish the content in the page so we just skip it
Logger.debug(PublishFactory.class, "publish html page: User has no permission to publish the content inode = " + ((Contentlet)asset).getInode() + " in the page, skipping it.");
}
}else if(asset instanceof Template){
Logger.debug(PublishFactory.class, "*****I'm an HTML Page -- Publishing Template =" + ((Template)asset).getInode());
publishAsset((Template)asset,user, respectFrontendRoles,false);
}
}
LiveCache.removeAssetFromCache((WebAsset) webAsset);
LiveCache.addToLiveAssetToCache((WebAsset) webAsset);
WorkingCache.removeAssetFromCache((WebAsset) webAsset);
WorkingCache.addToWorkingAssetToCache((WebAsset) webAsset);
//writes the htmlpage to a live directory under velocity folder
PageServices.invalidate((HTMLPage)webAsset);
//Refreshing the menues
if(RefreshMenus.shouldRefreshMenus((HTMLPage)webAsset)){
Folder folder = (Folder) APILocator.getFolderAPI().findParentFolder((Treeable)webAsset,user,false);
if(folder != null){
RefreshMenus.deleteMenu(folder);
CacheLocator.getNavToolCache().removeNav(folder.getHostId(),folder.getInode());
}
}
CacheLocator.getHTMLPageCache().remove((HTMLPage) webAsset);
}
if (webAsset instanceof Folder) {
Folder parentFolder = (Folder) webAsset;
Logger.debug(PublishFactory.class, "*****I'm a Folder -- Publishing" + parentFolder.getName());
//gets all links for this folder
java.util.List foldersListSubChildren = APILocator.getFolderAPI().findSubFolders(parentFolder,APILocator.getUserAPI().getSystemUser(),false);
//gets all links for this folder
java.util.List linksListSubChildren = APILocator.getFolderAPI().getWorkingLinks(parentFolder, user, false);
//gets all html pages for this folder
java.util.List htmlPagesSubListChildren = APILocator.getFolderAPI().getWorkingHTMLPages(parentFolder,user,false);
//gets all files for this folder
java.util.List filesListSubChildren = APILocator.getFolderAPI().getWorkingFiles(parentFolder,user,false);
//gets all templates for this folder
//java.util.List templatesListSubChildren = APILocator.getFolderAPI().getWorkingChildren(parentFolder,Template.class);
//gets all containers for this folder
//java.util.List containersListSubChildren = APILocator.getFolderAPI().getWorkingChildren(parentFolder,Container.class);
//gets all subitems
java.util.List elements = new java.util.ArrayList();
elements.addAll(foldersListSubChildren);
elements.addAll(linksListSubChildren);
elements.addAll(htmlPagesSubListChildren);
elements.addAll(filesListSubChildren);
//elements.addAll(templatesListSubChildren);
//elements.addAll(containersListSubChildren);
java.util.Iterator elementsIter = elements.iterator();
while (elementsIter.hasNext()) {
Inode inode = (Inode) elementsIter.next();
Logger.debug(PublishFactory.class, "*****I'm a Folder -- Publishing my Inode Child=" + inode.getInode());
publishAsset(inode,user, respectFrontendRoles, isNewVersion);
}
java.util.List<Contentlet> contentlets = conAPI.findContentletsByFolder(parentFolder, user, false);
java.util.Iterator<Contentlet> contentletsIter = contentlets.iterator();
while (contentletsIter.hasNext()) {
//publishes each one
Contentlet contentlet = (Contentlet)contentletsIter.next();
Logger.debug(PublishFactory.class, "*****I'm a Folder -- Publishing my Inode Child=" + contentlet.getInode());
if(!contentlet.isLive() && !contentlet.isArchived() && (permissionAPI.doesUserHavePermission(contentlet, PERMISSION_PUBLISH, user, respectFrontendRoles))) {
APILocator.getContentletAPI().publish(contentlet, user, false);
}
}
}
if (webAsset instanceof Link) {
List contentlets = InodeFactory.getParentsOfClass(webAsset, com.dotmarketing.portlets.contentlet.business.Contentlet.class);
Iterator it = contentlets.iterator();
while (it.hasNext()) {
com.dotmarketing.portlets.contentlet.business.Contentlet cont = (com.dotmarketing.portlets.contentlet.business.Contentlet) it.next();
if (cont.isLive()) {
try {
com.dotmarketing.portlets.contentlet.model.Contentlet newFormatContentlet =
conAPI.convertFatContentletToContentlet(cont);
ContentletServices.invalidate(newFormatContentlet, false);
ContentletMapServices.invalidate(newFormatContentlet, false);
} catch (DotDataException e) {
throw new WebAssetException(e.getMessage(), e);
}
}
}
// Removes static menues to provoke all possible dependencies be generated.
Folder parentFolder = (Folder)APILocator.getFolderAPI().findParentFolder((Treeable) webAsset,user,false);
Host host = (Host) hostAPI.findParentHost(parentFolder, APILocator.getUserAPI().getSystemUser(), respectFrontendRoles);
RefreshMenus.deleteMenu(host);
CacheLocator.getNavToolCache().removeNav(host.getIdentifier(), parentFolder.getInode());
}
return true;