From 10bc69cc634ceb2794be83d3c05363fe8cf539e5 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Mon, 12 Jan 2009 14:55:29 +0000 Subject: [PATCH] Fix for ALFCOM-2306 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12692 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/web/bean/BrowseBean.java | 9 +- .../web/bean/ml/MultilingualManageDialog.java | 857 +++++++++--------- source/web/WEB-INF/faces-config-beans.xml | 153 ++-- 3 files changed, 507 insertions(+), 512 deletions(-) diff --git a/source/java/org/alfresco/web/bean/BrowseBean.java b/source/java/org/alfresco/web/bean/BrowseBean.java index 07b9504879..d58e50b759 100644 --- a/source/java/org/alfresco/web/bean/BrowseBean.java +++ b/source/java/org/alfresco/web/bean/BrowseBean.java @@ -38,7 +38,6 @@ import java.util.Map; import java.util.Set; import javax.faces.context.FacesContext; -import javax.faces.context.ResponseWriter; import javax.faces.event.ActionEvent; import javax.transaction.UserTransaction; @@ -46,7 +45,7 @@ import org.alfresco.config.Config; import org.alfresco.config.ConfigElement; import org.alfresco.config.ConfigService; import org.alfresco.model.ApplicationModel; -import org.alfresco.model.ContentModel; +import org.alfresco.model.ContentModel; import org.alfresco.repo.search.SearcherException; import org.alfresco.repo.site.SiteModel; import org.alfresco.repo.web.scripts.FileTypeImageUtils; @@ -1728,7 +1727,7 @@ public class BrowseBean implements IContextListener, Serializable Node node = getActionSpace(); if (node != null) { - FacesContext fc = FacesContext.getCurrentInstance(); + FacesContext fc = FacesContext.getCurrentInstance(); NodeRef companyRootRef = new NodeRef(Repository.getStoreRef(), Application.getCompanyRootId(fc)); if (node.getNodeRef().equals(companyRootRef)) { @@ -1767,13 +1766,13 @@ public class BrowseBean implements IContextListener, Serializable // remember the bean from wich the action comes DocumentDetailsDialog docDetails = (DocumentDetailsDialog)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("DocumentDetailsDialog"); - docDetails.setTranslationDocument(new Node(translation)); + docDetails.setTranslationDocument(new MapNode(translation)); // set the ml container as the current document NodeRef mlContainer = getMultilingualContentService().getTranslationContainer(translation); setupContentAction(mlContainer.getId(), true); - } + } /** * Public helper to setup action pages with content context diff --git a/source/java/org/alfresco/web/bean/ml/MultilingualManageDialog.java b/source/java/org/alfresco/web/bean/ml/MultilingualManageDialog.java index ecb70d3623..e5de616f39 100644 --- a/source/java/org/alfresco/web/bean/ml/MultilingualManageDialog.java +++ b/source/java/org/alfresco/web/bean/ml/MultilingualManageDialog.java @@ -57,280 +57,278 @@ import org.alfresco.web.ui.common.component.UIPanel.ExpandedEvent; public class MultilingualManageDialog extends BaseDialogBean { - private static final long serialVersionUID = 4168804472130450812L; - - private final String MSG_MANAGE_DETAILS_FOR="manage_multilingual_details_for"; - private static final String MSG_CURRENT = "current"; - private static final String ML_VERSION_PANEL_ID = "ml-versions-panel"; - private static final String MSG_CLOSE = "close"; - - protected Map panels = new HashMap(4, 1.0f); - - transient private MultilingualContentService multilingualContentService; - transient private ContentFilterLanguagesService contentFilterLanguagesService; - transient private EditionService editionService; - transient private VersionService versionService; - - private Node translationDocument; - - /** For the client side iteration on the edition hitories list, it represents the index of the list */ - private int currentEditionCursorPosition; - - /** List of client light weight edition histories */ - private List editionHistory = null; - - /** - * Returns the document this bean is currently representing - * - * @return The document Node - */ - public Node getDocument() - { - return this.getNode(); - } - - /** - * Returns the Node this bean is currently representing - * - * @return The Node - */ - public Node getNode() - { - return this.browseBean.getDocument(); - } - - /** - * @param multilingualContentService the multilingual ContentService to set - */ - public void setMultilingualContentService(MultilingualContentService multilingualContentService) - { - this.multilingualContentService = multilingualContentService; - } - - /** - * @return multilingualContentService - */ - protected MultilingualContentService getMultilingualContentService() - { - //check for null for cluster environment - if (multilingualContentService == null) - { - multilingualContentService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getMultilingualContentService(); - } - return multilingualContentService; - } - - /** - * @param contentFilterLanguagesService The Content Filter Languages Service to set. - */ - public void setContentFilterLanguagesService(ContentFilterLanguagesService contentFilterLanguagesService) - { - this.contentFilterLanguagesService = contentFilterLanguagesService; - } + private static final long serialVersionUID = 4168804472130450812L; - /** - * @return contentFilterLanguagesService - */ - protected ContentFilterLanguagesService getContentFilterLanguagesService() - { - //check for null for cluster environment - if (contentFilterLanguagesService == null) - { - contentFilterLanguagesService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getContentFilterLanguagesService(); - } - return contentFilterLanguagesService; - } + private final String MSG_MANAGE_DETAILS_FOR="manage_multilingual_details_for"; + private static final String MSG_CURRENT = "current"; + private static final String ML_VERSION_PANEL_ID = "ml-versions-panel"; + private static final String MSG_CLOSE = "close"; + + protected Map panels = new HashMap(4, 1.0f); + + transient private MultilingualContentService multilingualContentService; + transient private ContentFilterLanguagesService contentFilterLanguagesService; + transient private EditionService editionService; + transient private VersionService versionService; + + private Node translationDocument; + + /** For the client side iteration on the edition hitories list, it represents the index of the list */ + private int currentEditionCursorPosition; + + /** List of client light weight edition histories */ + private List editionHistory = null; + + /** + * Returns the document this bean is currently representing + * + * @return The document Node + */ + public Node getDocument() + { + return this.getNode(); + } + + /** + * Returns the Node this bean is currently representing + * + * @return The Node + */ + public Node getNode() + { + return this.browseBean.getDocument(); + } + + /** + * @param multilingualContentService the multilingual ContentService to set + */ + public void setMultilingualContentService(MultilingualContentService multilingualContentService) + { + this.multilingualContentService = multilingualContentService; + } + + /** + * @return multilingualContentService + */ + protected MultilingualContentService getMultilingualContentService() + { + //check for null for cluster environment + if (multilingualContentService == null) + { + multilingualContentService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getMultilingualContentService(); + } + return multilingualContentService; + } + + /** + * @param contentFilterLanguagesService The Content Filter Languages Service to set. + */ + public void setContentFilterLanguagesService(ContentFilterLanguagesService contentFilterLanguagesService) + { + this.contentFilterLanguagesService = contentFilterLanguagesService; + } + + /** + * @return contentFilterLanguagesService + */ + protected ContentFilterLanguagesService getContentFilterLanguagesService() + { + //check for null for cluster environment + if (contentFilterLanguagesService == null) + { + contentFilterLanguagesService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getContentFilterLanguagesService(); + } + return contentFilterLanguagesService; + } + + /** + * @param EditionService The Edition Service to set. + */ + public void setEditionService(EditionService editionService) + { + this.editionService = editionService; + } + + /** + * @return editionService + */ + protected EditionService getEditionService() + { + //check for null for cluster environment + if (editionService == null) + { + editionService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getEditionService(); + } + return editionService; + } + + /** + * Sets the version service instance the bean should use + * + * @param versionService The VersionService + */ + public void setVersionService(VersionService versionService) + { + this.versionService = versionService; + } + + /** + * @return versionService + */ + protected VersionService getVersionService() + { + //check for null for cluster environment + if (versionService == null) + { + versionService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getVersionService(); + } + return versionService; + } + + /** + * Before opening the ml container details, remeber the translation + * from which the action comes. + * + * @param node + */ + public void setTranslationDocument(Node node) + { + this.translationDocument = node; + } + + /** + * @return Returns the panels expanded state map. + */ + public Map getPanels() + { + return this.panels; + } + + @Override + protected String finishImpl(FacesContext context, String outcome) throws Exception + { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getContainerTitle() + { + return Application.getMessage(FacesContext.getCurrentInstance(), MSG_MANAGE_DETAILS_FOR) + " '" + getDocument().getName() + "'"; + } + + @Override + public String getCancelButtonLabel() + { + return Application.getMessage(FacesContext.getCurrentInstance(), MSG_CLOSE); + } - /** - * @param EditionService The Edition Service to set. - */ - public void setEditionService(EditionService editionService) - { - this.editionService = editionService; - } - - /** - * @return editionService - */ - protected EditionService getEditionService() - { - //check for null for cluster environment - if (editionService == null) - { - editionService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getEditionService(); - } - return editionService; - } - - /** - * Sets the version service instance the bean should use - * - * @param versionService The VersionService - */ - public void setVersionService(VersionService versionService) - { - this.versionService = versionService; - } - - /** - * @return versionService - */ - protected VersionService getVersionService() - { - //check for null for cluster environment - if (versionService == null) - { - versionService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getVersionService(); - } - return versionService; - } - - /** - * Before opening the ml container details, remeber the translation - * from which the action comes. - * - * @param node - */ - public void setTranslationDocument(Node node) - { - this.translationDocument = node; - } - - /** - * @return Returns the panels expanded state map. - */ - public Map getPanels() - { - return this.panels; - } - - @Override - protected String finishImpl(FacesContext context, String outcome) throws Exception - { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getContainerTitle() - { - return Application.getMessage(FacesContext.getCurrentInstance(), MSG_MANAGE_DETAILS_FOR) + " '" + getDocument().getName() + "'"; - } - - @Override - public String getCancelButtonLabel() - { - - return Application.getMessage(FacesContext.getCurrentInstance(), MSG_CLOSE); - } - - /** * Returns a list of objects representing the translations of the current document - * - * @return List of translations - */ - public List getTranslations() - { - List translations = new ArrayList(); + * + * @return List of translations + */ + public List getTranslations() + { + List translations = new ArrayList(); - Node document = getDocument(); + Node document = getDocument(); - boolean canNewEdtion = MultilingualUtils.canStartNewEditon(document, FacesContext.getCurrentInstance()); + boolean canNewEdtion = MultilingualUtils.canStartNewEditon(document, FacesContext.getCurrentInstance()); - if (document.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) || ContentModel.TYPE_MULTILINGUAL_CONTAINER.equals(document.getType())) - { - Map translationsMap = getMultilingualContentService().getTranslations(getDocument().getNodeRef()); + if (document.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) || ContentModel.TYPE_MULTILINGUAL_CONTAINER.equals(document.getType())) + { + Map translationsMap = getMultilingualContentService().getTranslations(getDocument().getNodeRef()); - if (translationsMap != null && translationsMap.size() > 0) - { - for (Map.Entry entry : translationsMap.entrySet()) - { - NodeRef nodeRef = (NodeRef) entry.getValue(); - - // create a map node representation of the translation - MapNode mapNode = new MapNode(nodeRef); - - Locale locale = (Locale) getNodeService().getProperty(nodeRef, ContentModel.PROP_LOCALE); - - String lgge = (locale != null) ? - // convert the locale into new ISO codes - getContentFilterLanguagesService().convertToNewISOCode(locale.getLanguage()).toUpperCase() - : null; - - mapNode.put("name", getNodeService().getProperty(nodeRef, ContentModel.PROP_NAME)); - mapNode.put("language", lgge); - mapNode.put("url", DownloadContentServlet.generateBrowserURL(nodeRef, mapNode.getName())); - - boolean isEmpty = new Boolean(getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION)); - - mapNode.put("notEmpty", !isEmpty); - mapNode.put("userHasRight", new Boolean(canNewEdtion && !isEmpty)); - // add the client side version to the list - translations.add(mapNode); - } - } - } - - return translations; - } - - /** - * Init the mlContainer histories and returns an empty list to fill a rich list value without content. - * - * @return an empty list - */ - public List getEmptyListAndInitEditions() - { - // this call ensures that the edition of the mlContainer must be - // re-initialized. - - // remove each old mlContainer's translations of the panel list - List panelsToRemove = new ArrayList(); - for(Map.Entry panel : panels.entrySet()) - { - if(panel.getKey().startsWith(ML_VERSION_PANEL_ID)) + if (translationsMap != null && translationsMap.size() > 0) + { + for (Map.Entry entry : translationsMap.entrySet()) { - //panels.remove(panel.getKey()); - panelsToRemove.add(panel.getKey()); + NodeRef nodeRef = (NodeRef) entry.getValue(); + + // create a map node representation of the translation + MapNode mapNode = new MapNode(nodeRef); + + Locale locale = (Locale) getNodeService().getProperty(nodeRef, ContentModel.PROP_LOCALE); + + String lgge = (locale != null) ? + // convert the locale into new ISO codes + getContentFilterLanguagesService().convertToNewISOCode(locale.getLanguage()).toUpperCase() + : null; + + mapNode.put("name", getNodeService().getProperty(nodeRef, ContentModel.PROP_NAME)); + mapNode.put("language", lgge); + mapNode.put("url", DownloadContentServlet.generateBrowserURL(nodeRef, mapNode.getName())); + + boolean isEmpty = new Boolean(getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION)); + + mapNode.put("notEmpty", !isEmpty); + mapNode.put("userHasRight", new Boolean(canNewEdtion && !isEmpty)); + // add the client side version to the list + translations.add(mapNode); } - } + } + } - for(String panelId : panelsToRemove) - { - panels.remove(panelId); - } + return translations; + } - // init the Edition histories - initEditionHistory(); - currentEditionCursorPosition = -1; + /** + * Init the mlContainer histories and returns an empty list to fill a rich list value without content. + * + * @return an empty list + */ + public List getEmptyListAndInitEditions() + { + // this call ensures that the edition of the mlContainer must be + // re-initialized. - return new ArrayList(0); - } - - /** - * For the client side iteration on the edition hitories list, returns the number of editions. - * - * @return the number of edition of the current mlContainer - */ - public int getEditionSize() - { - // return the size of the list - return editionHistory.size(); - } - - /** - * For the client side iteration on the edition hitories list, - * return the next edition history. - * - * @return a light weight representation of an edition history - */ - public SingleEditionBean getNextSingleEditionBean() - { - currentEditionCursorPosition++; + // remove each old mlContainer's translations of the panel list + List panelsToRemove = new ArrayList(); + for(Map.Entry panel : panels.entrySet()) + { + if(panel.getKey().startsWith(ML_VERSION_PANEL_ID)) + { + //panels.remove(panel.getKey()); + panelsToRemove.add(panel.getKey()); + } + } - return getCurrentSingleEditionBean(); - } + for(String panelId : panelsToRemove) + { + panels.remove(panelId); + } + + // init the Edition histories + initEditionHistory(); + currentEditionCursorPosition = -1; + + return new ArrayList(0); + } + + /** + * For the client side iteration on the edition hitories list, returns the number of editions. + * + * @return the number of edition of the current mlContainer + */ + public int getEditionSize() + { + // return the size of the list + return editionHistory.size(); + } + + /** + * For the client side iteration on the edition hitories list, + * return the next edition history. + * + * @return a light weight representation of an edition history + */ + public SingleEditionBean getNextSingleEditionBean() + { + currentEditionCursorPosition++; + + return getCurrentSingleEditionBean(); + } /** * For the client side iteration on the edition hitories list, @@ -338,202 +336,201 @@ public class MultilingualManageDialog extends BaseDialogBean * * @return a light weight representation of an edition history */ - public SingleEditionBean getCurrentSingleEditionBean() - { - if (currentEditionCursorPosition < getEditionSize()) - { - return editionHistory.get(currentEditionCursorPosition); - } - - return null; - } - - /** - * Restore the translationf from which the ml container - * details dialog comes. - */ - public void resetMLDocument(ActionEvent event) - { - this.browseBean.setupCommonBindingProperties(this.translationDocument); - this.browseBean.setDocument(this.translationDocument); - } + public SingleEditionBean getCurrentSingleEditionBean() + { + if (currentEditionCursorPosition < getEditionSize()) + { + return editionHistory.get(currentEditionCursorPosition); + } - /** - * Action handler to remove a custom view template from the current node - */ - public void removeTemplate(ActionEvent event) - { - try - { - // clear template property - this.getNodeService().setProperty(getNode().getNodeRef(), ContentModel.PROP_TEMPLATE, null); - this.getNodeService().removeAspect(getNode().getNodeRef(), ContentModel.ASPECT_TEMPLATABLE); - - // reset node details for next refresh of details page - getNode().reset(); - } - catch (Exception e) - { - Utils.addErrorMessage(MessageFormat.format(Application.getMessage( - FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), e.getMessage()), e); - } - } - - /** - * Save the state of the panel that was expanded/collapsed - */ - public void expandPanel(ActionEvent event) - { - if (event instanceof ExpandedEvent) - { - String id = event.getComponent().getId(); - // we prefix some panels with "no-" which we remove to give consistent behaviour in the UI - if (id.startsWith("no-") == true) - { - id = id.substring(3); - } - this.panels.put(id, ((ExpandedEvent)event).State); - } - - String id = event.getComponent().getId(); + return null; + } - if(id.startsWith(ML_VERSION_PANEL_ID)) - { - this.currentEditionCursorPosition = Integer.parseInt(id.substring("ml-versions-panel".length())) - 1; - } - } - - - /** - * Returns the ml container of the document this bean is currently representing - * - * @return The document multilingual container NodeRef - */ - public Node getDocumentMlContainer() - { - Node currentNode = getNode(); + /** + * Restore the translationf from which the ml container + * details dialog comes. + */ + public void resetMLDocument(ActionEvent event) + { + this.browseBean.setupCommonBindingProperties(this.translationDocument); + this.browseBean.setDocument(this.translationDocument); + } - if(ContentModel.TYPE_MULTILINGUAL_CONTAINER.equals(currentNode.getType())) - { - return currentNode; - } - else - { - NodeRef nodeRef = getNode().getNodeRef(); + /** + * Action handler to remove a custom view template from the current node + */ + public void removeTemplate(ActionEvent event) + { + try + { + // clear template property + this.getNodeService().setProperty(getNode().getNodeRef(), ContentModel.PROP_TEMPLATE, null); + this.getNodeService().removeAspect(getNode().getNodeRef(), ContentModel.ASPECT_TEMPLATABLE); - return new Node(getMultilingualContentService().getTranslationContainer(nodeRef)); - } - } - - /** - * Constructs a list of objects representing the editions of the - * logical document - * - * @return List of editions - */ - @SuppressWarnings("unchecked") - private List initEditionHistory() - { - // get the mlContainer - NodeRef mlContainer = getDocumentMlContainer().getNodeRef(); + // reset node details for next refresh of details page + getNode().reset(); + } + catch (Exception e) + { + Utils.addErrorMessage(MessageFormat.format(Application.getMessage( + FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), e.getMessage()), e); + } + } - // get all editions and sort them ascending according their version label - List orderedEditionList = new ArrayList(getEditionService().getEditions(mlContainer).getAllVersions()); - Collections.sort(orderedEditionList, new VersionLabelComparator()); + /** + * Save the state of the panel that was expanded/collapsed + */ + public void expandPanel(ActionEvent event) + { + if (event instanceof ExpandedEvent) + { + String id = event.getComponent().getId(); + // we prefix some panels with "no-" which we remove to give consistent behaviour in the UI + if (id.startsWith("no-") == true) + { + id = id.substring(3); + } + this.panels.put(id, ((ExpandedEvent)event).State); + } - // the list of Single Edition Bean to return - editionHistory = new ArrayList(orderedEditionList.size()); + String id = event.getComponent().getId(); - boolean firstEdition = true; + if(id.startsWith(ML_VERSION_PANEL_ID)) + { + this.currentEditionCursorPosition = Integer.parseInt(id.substring("ml-versions-panel".length())) - 1; + } + } - // for each edition, init a SingleEditionBean - for (Version edition : orderedEditionList) - { - SingleEditionBean editionBean = new SingleEditionBean(); - MapNode clientEdition = new MapNode(edition.getFrozenStateNodeRef()); + /** + * Returns the ml container of the document this bean is currently representing + * + * @return The document multilingual container NodeRef + */ + public Node getDocumentMlContainer() + { + Node currentNode = getNode(); - String editionLabel = edition.getVersionLabel(); - if (firstEdition) + if(ContentModel.TYPE_MULTILINGUAL_CONTAINER.equals(currentNode.getType())) + { + return currentNode; + } + else + { + NodeRef nodeRef = getNode().getNodeRef(); + + return new Node(getMultilingualContentService().getTranslationContainer(nodeRef)); + } + } + + /** + * Constructs a list of objects representing the editions of the + * logical document + * + * @return List of editions + */ + @SuppressWarnings("unchecked") + private List initEditionHistory() + { + // get the mlContainer + NodeRef mlContainer = getDocumentMlContainer().getNodeRef(); + + // get all editions and sort them ascending according their version label + List orderedEditionList = new ArrayList(getEditionService().getEditions(mlContainer).getAllVersions()); + Collections.sort(orderedEditionList, new VersionLabelComparator()); + + // the list of Single Edition Bean to return + editionHistory = new ArrayList(orderedEditionList.size()); + + boolean firstEdition = true; + + // for each edition, init a SingleEditionBean + for (Version edition : orderedEditionList) + { + SingleEditionBean editionBean = new SingleEditionBean(); + + MapNode clientEdition = new MapNode(edition.getFrozenStateNodeRef()); + + String editionLabel = edition.getVersionLabel(); + if (firstEdition) + { + editionLabel += " (" + Application.getMessage(FacesContext.getCurrentInstance(), MSG_CURRENT) + ")"; + } + + clientEdition.put("editionLabel", editionLabel); + clientEdition.put("editionNotes", edition.getDescription()); + clientEdition.put("editionAuthor", edition.getCreator()); + clientEdition.put("editionDate", edition.getCreatedDate()); + + // Set the edition of the edition bean + editionBean.setEdition(clientEdition); + + // get translations + List translationHistories = null; + + if (firstEdition) + { + // Get the translations because the current edition doesn't content link with its + // translation in the version store. + Map translations = getMultilingualContentService().getTranslations(mlContainer); + translationHistories = new ArrayList(translations.size()); + for (NodeRef translation : translations.values()) { - editionLabel += " (" + Application.getMessage(FacesContext.getCurrentInstance(), MSG_CURRENT) + ")"; + translationHistories.add(getVersionService().getVersionHistory(translation)); } + } + else + { + translationHistories = getEditionService().getVersionedTranslations(edition); + } - clientEdition.put("editionLabel", editionLabel); - clientEdition.put("editionNotes", edition.getDescription()); - clientEdition.put("editionAuthor", edition.getCreator()); - clientEdition.put("editionDate", edition.getCreatedDate()); + // add each translation in the SingleEditionBean + for (VersionHistory versionHistory : translationHistories) + { + // get the list of versions and sort them ascending according their version label + List orderedVersions = new ArrayList(versionHistory.getAllVersions()); + Collections.sort(orderedVersions, new VersionLabelComparator()); - // Set the edition of the edition bean - editionBean.setEdition(clientEdition); + // the last version is the first version of the list + Version lastVersion = orderedVersions.get(0); - // get translations - List translationHistories = null; + // get the properties of the lastVersion + Map lastVersionProperties = getEditionService().getVersionedMetadatas(lastVersion); + Locale language = (Locale) lastVersionProperties.get(ContentModel.PROP_LOCALE); - if (firstEdition) + // create a map node representation of the last version + MapNode clientLastVersion = new MapNode(lastVersion.getFrozenStateNodeRef()); + + clientLastVersion.put("versionName", lastVersionProperties.get(ContentModel.PROP_NAME)); + // use the node service for the description to ensure that the returned value is a text and not a MLText + clientLastVersion.put("versionDescription", getNodeService().getProperty(lastVersion.getFrozenStateNodeRef(), ContentModel.PROP_DESCRIPTION)); + clientLastVersion.put("versionAuthor", lastVersionProperties.get(ContentModel.PROP_AUTHOR)); + clientLastVersion.put("versionCreatedDate", lastVersionProperties.get(ContentModel.PROP_CREATED)); + clientLastVersion.put("versionModifiedDate", lastVersionProperties.get(ContentModel.PROP_MODIFIED)); + clientLastVersion.put("versionLanguage", getContentFilterLanguagesService().convertToNewISOCode(language.getLanguage()).toUpperCase()); + + if(getNodeService().hasAspect(lastVersion.getFrozenStateNodeRef(), ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION)) { - // Get the translations because the current edition doesn't content link with its - // translation in the version store. - Map translations = getMultilingualContentService().getTranslations(mlContainer); - translationHistories = new ArrayList(translations.size()); - for (NodeRef translation : translations.values()) - { - translationHistories.add(getVersionService().getVersionHistory(translation)); - } + clientLastVersion.put("versionUrl", null); } else { - translationHistories = getEditionService().getVersionedTranslations(edition); + clientLastVersion.put("versionUrl", DownloadContentServlet.generateBrowserURL(lastVersion.getFrozenStateNodeRef(), clientLastVersion.getName())); } - // add each translation in the SingleEditionBean - for (VersionHistory versionHistory : translationHistories) - { - // get the list of versions and sort them ascending according their version label - List orderedVersions = new ArrayList(versionHistory.getAllVersions()); - Collections.sort(orderedVersions, new VersionLabelComparator()); + // add a translation of the editionBean + editionBean.addTranslations(clientLastVersion); + } + editionHistory.add(editionBean); + firstEdition = false; + } - // the last version is the first version of the list - Version lastVersion = orderedVersions.get(0); - - // get the properties of the lastVersion - Map lastVersionProperties = getEditionService().getVersionedMetadatas(lastVersion); - Locale language = (Locale) lastVersionProperties.get(ContentModel.PROP_LOCALE); - - // create a map node representation of the last version - MapNode clientLastVersion = new MapNode(lastVersion.getFrozenStateNodeRef()); - - clientLastVersion.put("versionName", lastVersionProperties.get(ContentModel.PROP_NAME)); - // use the node service for the description to ensure that the returned value is a text and not a MLText - clientLastVersion.put("versionDescription", getNodeService().getProperty(lastVersion.getFrozenStateNodeRef(), ContentModel.PROP_DESCRIPTION)); - clientLastVersion.put("versionAuthor", lastVersionProperties.get(ContentModel.PROP_AUTHOR)); - clientLastVersion.put("versionCreatedDate", lastVersionProperties.get(ContentModel.PROP_CREATED)); - clientLastVersion.put("versionModifiedDate", lastVersionProperties.get(ContentModel.PROP_MODIFIED)); - clientLastVersion.put("versionLanguage", getContentFilterLanguagesService().convertToNewISOCode(language.getLanguage()).toUpperCase()); - - if(getNodeService().hasAspect(lastVersion.getFrozenStateNodeRef(), ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION)) - { - clientLastVersion.put("versionUrl", null); - } - else - { - clientLastVersion.put("versionUrl", DownloadContentServlet.generateBrowserURL(lastVersion.getFrozenStateNodeRef(), clientLastVersion.getName())); - } - - // add a translation of the editionBean - editionBean.addTranslations(clientLastVersion); - } - editionHistory.add(editionBean); - firstEdition = false; - } - - return editionHistory; - } - @Override + return editionHistory; + } + @Override protected String getDefaultCancelOutcome() { resetMLDocument(null); return "dialog:close"; } - } diff --git a/source/web/WEB-INF/faces-config-beans.xml b/source/web/WEB-INF/faces-config-beans.xml index c288bf7cbe..9e1c6d2cb0 100644 --- a/source/web/WEB-INF/faces-config-beans.xml +++ b/source/web/WEB-INF/faces-config-beans.xml @@ -7,7 +7,7 @@ - The bean for the Delete Category screen. + The bean for the Manage Multilingual dialog. MultilingualManageDialog @@ -43,6 +43,7 @@ #{DocumentDetailsDialog.translationDocument} + The bean for the Manage Permissions. @@ -52,7 +53,6 @@ org.alfresco.web.bean.wcm.ManagePermissionsDialog session - personService #{PersonService} @@ -61,7 +61,6 @@ avmBrowseBean #{AVMBrowseBean} - @@ -481,43 +480,43 @@ - The bean that backs up the Delete Space Association Dialog - - DeleteSpaceAssociationDialog - org.alfresco.web.bean.spaces.DeleteSpaceAssociationDialog - session - - nodeService - #{NodeService} - - - fileFolderService - #{FileFolderService} - - - searchService - #{SearchService} - - - navigator - #{NavigationBean} - - - browseBean - #{BrowseBean} - - - dictionaryService - #{DictionaryService} - - - namespaceService - #{NamespaceService} - - - - - + The bean that backs up the Delete Space Association Dialog + + DeleteSpaceAssociationDialog + org.alfresco.web.bean.spaces.DeleteSpaceAssociationDialog + session + + nodeService + #{NodeService} + + + fileFolderService + #{FileFolderService} + + + searchService + #{SearchService} + + + navigator + #{NavigationBean} + + + browseBean + #{BrowseBean} + + + dictionaryService + #{DictionaryService} + + + namespaceService + #{NamespaceService} + + + + + The bean that manages a users Clipboard state. ClipboardBean @@ -3624,43 +3623,43 @@ - The bean that backs up the Delete Content Association Dialog - - DeleteContentAssociationDialog - org.alfresco.web.bean.content.DeleteContentAssociationDialog - session - - nodeService - #{NodeService} - - - fileFolderService - #{FileFolderService} - - - searchService - #{SearchService} - - - navigator - #{NavigationBean} - - - browseBean - #{BrowseBean} - - - dictionaryService - #{DictionaryService} - - - namespaceService - #{NamespaceService} - - - - - + The bean that backs up the Delete Content Association Dialog + + DeleteContentAssociationDialog + org.alfresco.web.bean.content.DeleteContentAssociationDialog + session + + nodeService + #{NodeService} + + + fileFolderService + #{FileFolderService} + + + searchService + #{SearchService} + + + navigator + #{NavigationBean} + + + browseBean + #{BrowseBean} + + + dictionaryService + #{DictionaryService} + + + namespaceService + #{NamespaceService} + + + + + The bean that backs up the Delete AVM Folder Dialog DeleteFolderDialog