Merged DEV/WCM_SERVICES2 to HEAD

12236: Implementation of Sandbox Revert REST API
  12305: WCM Services - "asset service" initial checkpoint (more tests to be added)
  12334: placeholder for WCM Asset implementation
  12338: Check in to get server working ...
  12341: WCM Services - "asset service" checkpoint (locking fixes, bulk import, more tests added)


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12544 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2008-12-23 14:48:34 +00:00
parent f817f00f06
commit 39e1bfee9d
7 changed files with 110 additions and 315 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -29,8 +29,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.faces.context.FacesContext;
import org.alfresco.model.WCMModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.domain.PropertyValue;
@@ -41,11 +39,11 @@ import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.Pair;
import org.alfresco.web.app.Application;
import org.alfresco.wcm.asset.AssetInfo;
import org.alfresco.wcm.asset.AssetInfoImpl;
import org.alfresco.web.bean.BrowseBean;
import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.NodePropertyResolver;
import org.alfresco.web.config.ClientConfigElement;
/**
* Node class representing an AVM specific Node.
@@ -169,6 +167,18 @@ public class AVMNode extends Node implements Map<String, Object>
private WebProject webProject;
private Boolean workflowInFlight;
public AVMNode(final AssetInfo asset)
{
super(AVMNodeConverter.ToNodeRef(-1, asset.getAvmPath()));
// TODO - refactor !!
this.avmRef = ((AssetInfoImpl)asset).getAVMNodeDescriptor();
this.version = -1; // TODO: always -1 for now...
this.id = asset.getAvmPath();
this.deleted = asset.isDeleted();
}
/**
* Constructor
*

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,22 +24,17 @@
*/
package org.alfresco.web.bean.wcm;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.alfresco.wcm.asset.AssetService;
import org.alfresco.web.bean.dialog.BaseDialogBean;
import org.alfresco.web.bean.repository.Repository;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Bean implementation for the AVM "Create Folder" dialog.
@@ -50,9 +45,9 @@ public class CreateFolderDialog extends BaseDialogBean
{
private static final long serialVersionUID = 5501238017264037644L;
private static final Log logger = LogFactory.getLog(CreateFolderDialog.class);
//private static final Log logger = LogFactory.getLog(CreateFolderDialog.class);
transient private AVMService avmService;
transient private AssetService assetService;
protected AVMBrowseBean avmBrowseBean;
protected String name;
@@ -80,20 +75,20 @@ public class CreateFolderDialog extends BaseDialogBean
}
/**
* @param avmService The avmService to set.
* @param assetService The assetService to set.
*/
public void setAvmService(AVMService avmService)
public void setAssetService(AssetService assetService)
{
this.avmService = avmService;
this.assetService = assetService;
}
protected AVMService getAvmService()
protected AssetService getAssetService()
{
if (avmService == null)
if (assetService == null)
{
avmService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getAVMService();
assetService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getAssetService();
}
return avmService;
return assetService;
}
/**
@@ -155,22 +150,23 @@ public class CreateFolderDialog extends BaseDialogBean
protected String finishImpl(FacesContext context, String outcome) throws Exception
{
String parent = this.avmBrowseBean.getCurrentPath();
this.getAvmService().createDirectory(parent, this.name);
String path = parent + '/' + this.name;
NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, path);
this.getNodeService().addAspect(nodeRef, ApplicationModel.ASPECT_UIFACETS, null);
if (this.title != null && this.title.length() != 0)
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(2);
if (title != null && title.length() != 0)
{
this.getAvmService().setNodeProperty(path, ContentModel.PROP_TITLE,
new PropertyValue(DataTypeDefinition.TEXT, this.title));
properties.put(ContentModel.PROP_TITLE, title);
}
if (this.description != null && this.description.length() != 0)
if (description != null && description.length() != 0)
{
this.getAvmService().setNodeProperty(path, ContentModel.PROP_DESCRIPTION,
new PropertyValue(DataTypeDefinition.TEXT, this.description));
properties.put(ContentModel.PROP_DESCRIPTION, description);
}
String[] parts = parent.split(":");
String sbStoreId = parts[0];
String path = parts[1];
this.getAssetService().createFolder(sbStoreId, path, this.name, properties);
return outcome;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -34,16 +34,12 @@ import javax.faces.model.SelectItem;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.wcm.webproject.WebProjectInfo;
import org.alfresco.wcm.webproject.WebProjectService;
import org.alfresco.web.app.Application;
@@ -70,6 +66,7 @@ public class CreateLayeredFolderDialog extends CreateFolderDialog
protected List<SelectItem> webProjects;
transient protected WebProjectService wpService;
transient protected AVMService avmService;
/**
* @param wpService The WebProjectService to set.
@@ -88,6 +85,23 @@ public class CreateLayeredFolderDialog extends CreateFolderDialog
return wpService;
}
/**
* @param avmService The avmService to set.
*/
public void setAvmService(AVMService avmService)
{
this.avmService = avmService;
}
protected AVMService getAvmService()
{
if (avmService == null)
{
avmService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getAVMService();
}
return avmService;
}
// ------------------------------------------------------------------------------
// Dialog implementation

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,40 +24,14 @@
*/
package org.alfresco.web.bean.wcm;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.transaction.UserTransaction;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.ImporterActionExecuter;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.domain.PropertyValue;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.TempFileProvider;
import org.alfresco.wcm.asset.AssetService;
import org.alfresco.web.app.AlfrescoNavigationHandler;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.context.UIContextService;
@@ -65,9 +39,6 @@ import org.alfresco.web.bean.FileUploadBean;
import org.alfresco.web.bean.dialog.BaseDialogBean;
import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.ui.common.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tools.zip.ZipFile;
/**
* Backing bean for the Import Website Content dialog.
@@ -81,56 +52,16 @@ public class ImportWebsiteDialog extends BaseDialogBean
{
private static final long serialVersionUID = -432986732265292504L;
private static final int BUFFER_SIZE = 16384;
private static Log logger = LogFactory.getLog(ImportWebsiteDialog.class);
//private static Log logger = LogFactory.getLog(ImportWebsiteDialog.class);
protected File file;
protected String fileName;
protected boolean isFinished = false;
protected boolean highByteZip = false;
transient private FileFolderService fileFolderService;
transient private ContentService contentService;
protected AVMBrowseBean avmBrowseBean;
transient private AVMService avmService;
transient private NodeService nodeService;
/**
* @param contentService The ContentService to set.
*/
public void setContentService(ContentService contentService)
{
this.contentService = contentService;
}
protected ContentService getContentService()
{
if (this.contentService == null)
{
this.contentService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getContentService();
}
return this.contentService;
}
transient private AssetService assetService;
/**
* @param fileFolderService The FileFolderService to set.
*/
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService = fileFolderService;
}
protected FileFolderService getFileFolderService()
{
if (this.fileFolderService == null)
{
this.fileFolderService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getFileFolderService();
}
return this.fileFolderService;
}
/**
* @param avmBrowseBean The AVMBrowseBean to set.
@@ -141,37 +72,20 @@ public class ImportWebsiteDialog extends BaseDialogBean
}
/**
* @param avmService The AVMService to set.
* @param avmService The AssetService to set.
*/
public void setAvmService(AVMService avmService)
public void setAssetService(AssetService assetService)
{
this.avmService = avmService;
this.assetService = assetService;
}
protected AVMService getAvmService()
protected AssetService getAssetService()
{
if (this.avmService == null)
if (this.assetService == null)
{
this.avmService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getAVMLockingAwareService();
this.assetService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getAssetService();
}
return this.avmService;
}
/**
* @param nodeService The NodeService to set.
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
protected NodeService getNodeService()
{
if (this.nodeService == null)
{
this.nodeService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getNodeService();
}
return this.nodeService;
return this.assetService;
}
/**
@@ -257,35 +171,28 @@ public class ImportWebsiteDialog extends BaseDialogBean
{
this.isFinished = true;
UserTransaction tx = null;
try
{
FacesContext context = FacesContext.getCurrentInstance();
RetryingTransactionHelper.RetryingTransactionCallback<String> cb =
new RetryingTransactionHelper.RetryingTransactionCallback<String>()
RetryingTransactionHelper.RetryingTransactionCallback<Object> cb =
new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
{
public String execute()
public Object execute()
{
// get the AVM path that will contain the imported content
String rootPath = avmBrowseBean.getCurrentPath();
String[] parts = rootPath.split(":");
String sbStoreId = parts[0];
String parentFolderPath = parts[1];
// convert the AVM path to a NodeRef so we can use the NodeService to perform import
NodeRef importRef = AVMNodeConverter.ToNodeRef(-1, rootPath);
processZipImport(file, importRef);
// After a bulk import it's a good idea to snapshot the store
getAvmService().createSnapshot(
AVMUtil.getStoreName(rootPath),
"Import of file: " + fileName, null);
return rootPath;
getAssetService().bulkImport(sbStoreId, parentFolderPath, file, isHighByteZip());
return null;
}
};
String rootPath = Repository.getRetryingTransactionHelper(context).doInTransaction(cb);
// Reload virtualisation server as required
AVMUtil.updateVServerWebapp(rootPath, true);
Repository.getRetryingTransactionHelper(context).doInTransaction(cb);
UIContextService.getInstance(context).notifyBeans();
@@ -353,130 +260,6 @@ public class ImportWebsiteDialog extends BaseDialogBean
ctx.getExternalContext().getSessionMap().remove(FileUploadBean.FILE_UPLOAD_BEAN_NAME);
}
/**
* Process ZIP file for import into an AVM repository store location
*
* @param file ZIP format file
* @param rootRef Root reference of the AVM location to import into
*/
public void processZipImport(File file, NodeRef rootRef)
{
try
{
// NOTE: This encoding allows us to workaround bug:
// http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=4820807
ZipFile zipFile = new ZipFile(file, this.highByteZip ? "Cp437" : null);
File alfTempDir = TempFileProvider.getTempDir();
// build a temp dir name based on the name of the file we are importing
File tempDir = new File(alfTempDir.getPath() + File.separatorChar + file.getName() + "_unpack");
try
{
ImporterActionExecuter.extractFile(zipFile, tempDir.getPath());
importDirectory(tempDir.getPath(), rootRef);
}
finally
{
if (tempDir.exists())
{
ImporterActionExecuter.deleteDir(tempDir);
}
}
}
catch (IOException e)
{
throw new AlfrescoRuntimeException("Unable to process Zip file. File may not be of the expected format.", e);
}
}
/**
* Recursively import a directory structure into the specified root node
*
* @param dir The directory of files and folders to import
* @param root The root node to import into
*/
private void importDirectory(String dir, NodeRef root)
{
ServiceRegistry services = Repository.getServiceRegistry(FacesContext.getCurrentInstance());
MimetypeService mimetypeService = services.getMimetypeService();
File topdir = new File(dir);
if (!topdir.exists()) return;
for (File file : topdir.listFiles())
{
try
{
if (file.isFile())
{
// Create a file in the AVM store
String avmPath = AVMNodeConverter.ToAVMVersionPath(root).getSecond();
String fileName = file.getName();
List<QName> aspects = new ArrayList<QName>();
aspects.add(ContentModel.ASPECT_TITLED);
Map<QName, PropertyValue> properties = new HashMap<QName, PropertyValue>();
properties.put(ContentModel.PROP_TITLE,
new PropertyValue(DataTypeDefinition.TEXT, fileName));
this.getAvmService().createFile(
avmPath, fileName,new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE),
aspects, properties);
// TODO: restore this code once performance is acceptable
// NodeRef fileRef = AVMNodeConverter.ToNodeRef(-1, filePath);
// see AVMBrowseBean.setAVMNodeDescriptor
// add titled aspect for the read/edit properties screens
// Map<QName, Serializable> titledProps = new HashMap<QName, Serializable>(1, 1.0f);
// titledProps.put(ContentModel.PROP_TITLE, fileName);
// this.nodeService.addAspect(fileRef, ContentModel.ASPECT_TITLED, titledProps);
// for now use the avm service directly
// String filePath = avmPath + '/' + fileName;
// this.avmService.addAspect(filePath, ContentModel.ASPECT_TITLED);
// this.avmService.setNodeProperty(filePath, ContentModel.PROP_TITLE,
// new PropertyValue(DataTypeDefinition.TEXT, fileName));
// create content node based on the filename
/*FileInfo contentFile = fileFolderService.create(root, fileName, ContentModel.TYPE_AVM_PLAIN_CONTENT);
NodeRef content = contentFile.getNodeRef();
InputStream contentStream = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE);
ContentWriter writer = contentService.getWriter(content, ContentModel.PROP_CONTENT, true);
writer.setMimetype(mimetypeService.guessMimetype(file.getAbsolutePath()));
// TODO: what should we set this too? (definitely not Cp437...!)
//writer.setEncoding("Cp437");
writer.putContent(contentStream);*/
}
else
{
//FileInfo fileInfo = fileFolderService.create(root, file.getName(), ContentModel.TYPE_AVM_PLAIN_FOLDER);
// Create a directory in the AVM store
String avmPath = AVMNodeConverter.ToAVMVersionPath(root).getSecond();
List<QName> aspects = new ArrayList<QName>();
aspects.add(ApplicationModel.ASPECT_UIFACETS);
this.getAvmService().createDirectory(avmPath, file.getName(), aspects, null);
String folderPath = avmPath + '/' + file.getName();
NodeRef folderRef = AVMNodeConverter.ToNodeRef(-1, folderPath);
importDirectory(file.getPath(), folderRef);
// TODO: restore this code once performance is acceptable
// see AVMBrowseBean.setAVMNodeDescriptor
// add the uifacets aspect for the read/edit properties screens
// this.nodeService.addAspect(folderRef, ContentModel.ASPECT_UIFACETS, null);
}
}
catch (FileNotFoundException e)
{
// TODO: add failed file info to status message?
throw new AlfrescoRuntimeException("Failed to process ZIP file.", e);
}
catch (FileExistsException e)
{
// TODO: add failed file info to status message?
throw new AlfrescoRuntimeException("Failed to process ZIP file.", e);
}
}
}
@Override
protected String finishImpl(FacesContext context, String outcome) throws Exception
{

View File

@@ -478,11 +478,11 @@ public class SubmitDialog extends BaseDialogBean
// direct submit to the staging area without workflow
List<ItemWrapper> items = getSubmitItems();
List<AVMNodeDescriptor> nodes = new ArrayList<AVMNodeDescriptor>(items.size());
List<String> relativePaths = new ArrayList<String>(items.size());
for (ItemWrapper wrapper : items)
{
nodes.add(wrapper.getDescriptor());
relativePaths.add(AVMUtil.getStoreRelativePath(wrapper.getDescriptor().getPath()));
}
String sbStoreId = this.avmBrowseBean.getSandbox();
@@ -490,7 +490,7 @@ public class SubmitDialog extends BaseDialogBean
String submitLabel = this.label;
String submitComment = this.comment;
getSandboxService().submitListNodes(sbStoreId, nodes, this.expirationDates, submitLabel, submitComment);
getSandboxService().submitList(sbStoreId, relativePaths, this.expirationDates, submitLabel, submitComment);
// if we get this far return the default outcome
return this.getDefaultFinishOutcome();

View File

@@ -28,7 +28,6 @@ import java.io.IOException;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -53,6 +52,8 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.wcm.asset.AssetInfo;
import org.alfresco.wcm.asset.AssetInfoImpl;
import org.alfresco.wcm.sandbox.SandboxConstants;
import org.alfresco.wcm.sandbox.SandboxInfo;
import org.alfresco.wcm.sandbox.SandboxService;
@@ -720,9 +721,9 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
// compare user sandbox to staging sandbox - filter by current webapp, include deleted items
String userStore = AVMUtil.buildUserMainStoreName(storeRoot, username);
List<AVMNodeDescriptor> nodes = sandboxService.listChangedWebApp(userStore, getWebapp(), true);
List<AssetInfo> assets = sandboxService.listChangedWebApp(userStore, getWebapp(), true);
if (nodes.size() != 0)
if (assets.size() != 0)
{
// info we need to calculate preview paths for assets
int rootPathIndex = AVMUtil.buildSandboxRootPath(userStore).length();
@@ -735,6 +736,13 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
String id = getClientId(fc);
// TODO - refactor to AssetInfo and getSelected calls ... etc
List<AVMNodeDescriptor> nodes = new ArrayList<AVMNodeDescriptor>(assets.size());
for (AssetInfo asset : assets)
{
// TODO
nodes.add(((AssetInfoImpl)asset).getAVMNodeDescriptor());
}
// store lookup of username to list of modified nodes
this.userNodes.put(username, nodes);
@@ -781,11 +789,11 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
// output each of the modified files as a row in the table
int rowIndex = 0;
for (AVMNodeDescriptor node : nodes)
for (AssetInfo node : assets)
{
// TODO: different display cases for diff.getDifferenceCode()?
boolean isGhost = node.isDeleted();
String sourcePath = node.getPath();
String sourcePath = node.getAvmPath();
// output multi-select checkbox
out.write("<tr><td><input type='checkbox' name='");
@@ -830,11 +838,11 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
out.write("</td><td>");
// created date
out.write(df.format(new Date(node.getCreateDate())));
out.write(df.format(node.getCreatedDate()));
out.write("</td><td>");
// modified date
out.write(df.format(new Date(node.getModDate())));
out.write(df.format(node.getModifiedDate()));
out.write("</td><td>");
// build node context required for actions
@@ -846,7 +854,7 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
// size of files
if (node.isFile())
{
out.write(getSizeConverter().getAsString(fc, this, node.getLength()));
out.write(getSizeConverter().getAsString(fc, this, node.getFileSize()));
out.write("</td><td>");
// add UI actions for this item
@@ -867,7 +875,7 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
// must have been deleted from this sandbox - show as ghosted
String name = node.getName();
out.write("<td width=16>");
if (node.isDeletedFile())
if (node.isFile() && node.isDeleted())
{
out.write(Utils.buildImageTag(fc, FileTypeImageUtils.getFileTypeImage(fc, name, true), ""));
out.write("</td><td style='color:#aaaaaa'>");
@@ -883,17 +891,17 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
out.write("</td><td style='color:#aaaaaa'>");
// created date
out.write(df.format(new Date(node.getCreateDate())));
out.write(df.format(node.getCreatedDate()));
out.write("</td><td style='color:#aaaaaa'>");
// modified date
out.write(df.format(new Date(node.getModDate())));
out.write(df.format(node.getModifiedDate()));
out.write("</td><td style='color:#aaaaaa'>");
// size of files
if (node.isFile())
{
out.write(getSizeConverter().getAsString(fc, this, node.getLength()));
out.write(getSizeConverter().getAsString(fc, this, node.getFileSize()));
}
out.write("</td><td style='color:#aaaaaa'>");

View File

@@ -3418,20 +3418,8 @@
<managed-bean-class>org.alfresco.web.bean.wcm.ImportWebsiteDialog</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>nodeService</property-name>
<value>#{nodeService}</value>
</managed-property>
<managed-property>
<property-name>fileFolderService</property-name>
<value>#{FileFolderService}</value>
</managed-property>
<managed-property>
<property-name>contentService</property-name>
<value>#{ContentService}</value>
</managed-property>
<managed-property>
<property-name>avmService</property-name>
<value>#{AVMLockingAwareService}</value>
<property-name>assetService</property-name>
<value>#{AssetService}</value>
</managed-property>
<managed-property>
<property-name>avmBrowseBean</property-name>
@@ -3793,17 +3781,13 @@
<managed-bean-class>org.alfresco.web.bean.wcm.CreateFolderDialog</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>avmService</property-name>
<value>#{AVMLockingAwareService}</value>
<property-name>assetService</property-name>
<value>#{AssetService}</value>
</managed-property>
<managed-property>
<property-name>avmBrowseBean</property-name>
<value>#{AVMBrowseBean}</value>
</managed-property>
<managed-property>
<property-name>nodeService</property-name>
<value>#{NodeService}</value>
</managed-property>
</managed-bean>
<managed-bean>