cancel
Showing results for 
Search instead for 
Did you mean: 

Tutorial: Cambiar default content type Add content Dialog

dfernandezgonza
Champ in-the-making
Champ in-the-making
Hola buenas, he creado un AMP para cambiar el tipo de contenido por defecto  al añadir un contenido .

Software necesario. Alfresco-community y alfresco-community-sdk tienen que coincidir en versión.

ALFRESCO http://process.alfresco.com/ccdl/?file=release/community/build-3370/alfresco-community-3.4.d-install....
ALFRESCO SDK  http://process.alfresco.com/ccdl/?file=release/community/build-3370/alfresco-community-sdk-3.4.d.zip

ALFRESCO MMT http://process.alfresco.com/ccdl/?file=release/community/build-2860/alfresco-mmt-3.3g.jar

Código fuente.

CARPETA RAÍZ (/)


1.1) build.xml


<?xml version="1.0"?><project name="Change Default Content" default="package-amp" basedir="."><property name="project.dir" value="." /><property file="${project.dir}/amp-build.properties" /><property file="${project.dir}/module.properties" /><property name="build.dir" value="${project.dir}/build" /><property name="config.dir" value="${project.dir}/config" /><property name="jar.file" value="${build.dir}/lib/${lib.name}.jar" /><property name="amp.file" value="${build.dir}/dist/${amp.name}.amp" /><target name="mkdirs">    <mkdir dir="${build.dir}/dist" />    <mkdir dir="${build.dir}/lib" />    <mkdir dir="${build.dir}/classes" /></target><path id="class.path">    <dirset dir="${build.dir}" />    <fileset dir="${project.dir}/lib" includes="**/*.jar" />       <fileset dir="/alfresco-community-sdk-3.4.d/lib/server" includes="**/*.jar"/>    <!– Tiene que indicar la ruta a esa carpeta dentro de alfresco-community-sdk-3.4.d –></path><target name="clean">    <delete dir="${build.dir}" /></target><target name="compile" depends="mkdirs">    <javac classpathref="class.path" debug="${debug}" srcdir="${project.dir}/source/java" destdir="${build.dir}/classes" target="1.5" encoding="UTF-8" />    <copy todir="${build.dir}/classes">        <fileset dir="${project.dir}/source/java" defaultexcludes="false">            <exclude name="**/*.java" />            <exclude name="**/.svn/**" />            <exclude name="**/CVS/**" />        </fileset>    </copy></target><target name="package-jar" depends="compile">    <jar destfile="${jar.file}" encoding="UTF-8">        <fileset dir="${build.dir}/classes" excludes="**/custom*,**/*Test*" defaultexcludes="false" />    </jar></target><target name="package-amp" depends="package-jar" description="Package the Module">    <zip destfile="${amp.file}" encoding="UTF-8">        <fileset dir="${project.dir}/build" includes="lib/*.jar" />        <fileset dir="${project.dir}" includes="config/**/*.*" excludes="**/module.properties" />        <fileset dir="${project.dir}">            <include name="module.properties" />            <include name="file-mapping.properties" />            <include name="WEB-INF/**/*" />            <exclude name="WEB-INF/alfresco.tld" />            <exclude name="WEB-INF/repo.tld" />        </fileset>        <zipfileset dir="source/web" prefix="web" />    </zip></target></project>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


1.2) amp-build.properties

amp.name=NewModulelib.name=NewModule‍‍‍‍

1.3) module.properties

module.id=org.alfresco.module.NewContentmodule.title=NewContent Projectmodule.description=NewContent Project to build an amp filemodule.version=1.0‍‍‍‍‍‍

1.4) file-mapping.properties

include.default=true/web/WEB-INF=/WEB-INF‍‍‍‍‍

CARPETA  /config/alfresco/extension/model

2.1) customModel.xml

<?xml version="1.0" encoding="UTF-8"?><!– Custom Model –><!– Note: This model is pre-configured to load at startup of the Repository.  So, all custom –><!–       types and aspects added here will automatically be registered –><model name="custom:customModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">   <!– Optional meta-data about the model –>   <description>Custom Model</description>   <author></author>   <version>1.0</version>   <imports>          <!– Import Alfresco Dictionary Definitions –>      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>      <!– Import Alfresco Content Domain Model Definitions –>      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>   </imports>   <!– Introduction of new namespaces defined by this model –>   <!– NOTE: The following namespace custom.model should be changed to reflect your own namespace –>   <namespaces>      <namespace uri="http://www.alfresco.org/model/custom/1.0" prefix="custom"/>   </namespaces>   <types>                <type name="custom:contenido">                        <title>Versionable Aspect</title>                        <parent>cm:content</parent>                        <mandatory-aspects>                            <aspect>cm:versionable</aspect> <!– Contenidos versionables –>                            <aspect>cm:generalclassifiable</aspect><!– Contenidos Categorizables –>                        </mandatory-aspects>                </type>   </types></model>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


CARPETA  /config/alfresco/extension

2.2)web-client-config-custom.xml

<alfresco-config>    <config evaluator="string-compare" condition="Content Wizards">     <content-types>        <type name="custom:contenido"  display-label-id="custom_title" />        <!–Se añade el nuevo tipo de contenido a la lista –>     </content-types>    </config>        <config>        <!-Indicamos la nueva jsp para el Bean AddContentDialog –>        <dialogs>            <dialog name="addContent" page="/jsp/extension/add-content-dialog.jsp" managed-bean="AddContentDialog"             icon="/images/icons/add_content_large.gif" title-id="custom_add_content_dialog_title"             description-id="custom_add_content_dialog_desc"/>        </dialogs>    </config>     <config>      <wizards>         <!-Indicamos los nuevos pasos del Wizard Crear Contenido. Se añade paso 3 (selección de categorías) –>         <wizard name="createContent" managed-bean="CustomCreateContentWizard"                 title-id="custom_create_content_wizard_title"                 description-id="create_content_desc"                 icon="/images/icons/new_content_large.gif">            <step name="details" title-id="details" description-id="create_content_step1_desc">               <page path="/jsp/content/create-content-wizard/details.jsp"                     title-id="create_content_step1_title"                     description-id="create_content_step1_desc"                     instruction-id="default_instruction" />            </step>            <step name="content" title-id="enter_content" description-id="create_content_step2_desc">               <condition if="#{CreateContentWizard.mimeType == 'text/html'}">                  <page path="/jsp/content/create-content-wizard/create-html.jsp"                        title-id="create_content_step2_title"                        description-id="create_content_step2_desc"                        instruction-id="default_instruction" />               </condition>               <!– Default to the inline text editor –>               <page path="/jsp/content/create-content-wizard/create-text.jsp"                     title-id="create_content_step2_title"                     description-id="create_content_step2_desc"                     instruction-id="default_instruction" />            </step>            <step name="aspect" title-id="select_category" description-id="create_content_step3_desc">               <page path="/jsp/extension/add-category.jsp"                     title-id="create_content_step3_title"                     description-id="create_content_step3_desc"                     instruction-id="default_instruction" />            </step>            <step name="summary" title-id="summary" description-id="summary_step_description">               <page path="/jsp/wizard/summary.jsp"                     title-id="summary"                     description-id="summary_desc"                     instruction-id="content_finish_instruction" />            </step>         </wizard>      </wizards>   </config>    <config evaluator="string-compare" condition="Languages" replace="true">      <!– the list of available language files –>        <languages>                <language locale="es_ES">Spanish</language>                <language locale="en_US">English</language>                <language locale="it_IT">Italian</language>                <language locale="fr_FR">French</language>                <language locale="de_DE">German</language>      </languages>    </config>            </alfresco-config>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

CARPETA  /config/alfresco/extension/messages

2.2)messages_newContent.properties

custom_add_content_dialog_title=Add Content Dialogcustom_add_content_dialog_desc=This dialog helps you to add content to a space.custom_title=New  Contentcustom_create_content_wizard_title=Create Content Wizardselect_category=Select a categorycreate_content_step3_title=Step Three - Select categoriescreate_content_step3_desc=Select categories to the content. Must have previously chosen the right model (New Content)custom_title=New Content‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


CARPETA  /config/alfresco/extension/module/org.alfresco.module.NewContent/context

2.3)service-context.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans>       <bean id="AddContentDialog" class="org.alfresco.module.NewContent.CustomAddContentDialog" >           </bean>    </beans>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

CARPETA  /config/alfresco/extension/module/org.alfresco.module.NewContent/

2.3)log4j.properties

log4j.logger.org.alfresco.module.NewContent.CustomAddContentDialog=debug‍‍‍


2.4)module-context.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans>    <import resource="classpath:alfresco/module/org.alfresco.module.NewContent/context/service-context.xml" />    <!– Registration of new models –>    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">        <property name="models">            <list>                <value>alfresco/extension/model/customModel.xml</value>            </list>        </property>    </bean>    <!– Load the UI customizations –>    <bean id="content.ConfigBootstrap" class="org.alfresco.web.config.WebClientConfigBootstrap" init-method="init">    <property name="configs">        <list>            <value>classpath:alfresco/module/org.alfresco.module.NewContent/ui/web-client-config-custom.xml</value>        </list>    </property>    </bean>    <bean id="bootstrapExtraBundlesBean" class="org.alfresco.web.app.ResourceBundleBootstrap">        <property name="resourceBundles">            <list>                <value>alfresco.messages.messages_newContent</value>            </list>        </property>    </bean></beans>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


CARPETA  /source/java/org/alfresco/module/NewContent

3.1)CustomAddContentDialog.java

package org.alfresco.module.NewContent;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.Map;import java.io.Serializable;import javax.faces.context.FacesContext;import javax.faces.model.SelectItem;import org.alfresco.model.ContentModel;import org.alfresco.service.cmr.repository.NodeRef;import org.alfresco.web.bean.content.AddContentDialog;import org.apache.log4j.Logger;@SuppressWarnings({"serial", "unchecked"})public class CustomAddContentDialog extends AddContentDialog{      /**    * Log variable    */    private Logger logger = Logger.getLogger(CustomAddContentDialog.class);    private NodeRef addedCategory;    private List<NodeRef> categories;    public List getCategories(){        return this.categories;    }    public void setCategories(List categories)    {        this.categories = categories;    }    public void setAddedCategory(NodeRef addedCategory)    {        this.addedCategory = addedCategory;    }    public NodeRef getAddedCategory()    {        return this.addedCategory;    }    // ——————————————————————————    // Dialog implementation    @Override    protected String finishImpl(FacesContext context, String outcome) throws Exception    {                outcome = super.finishImpl(context, outcome);        Map updateProps = getNodeService().getProperties(this.createdNode);        updateProps.put(ContentModel.PROP_CATEGORIES, (Serializable)this.categories);        getNodeService().setProperties(this.createdNode, updateProps);        // return default outcome        return outcome;    }    @Override    public void init(Map<String, String> parameters)    {                super.init(parameters);        clearUpload();               this.categories = new ArrayList<NodeRef>();        this.addedCategory = null;            }    @Override    public boolean getFinishButtonDisabled()    {     return false;    }    /**    * @return Returns a list of object types to allow the user to select from    */    @Override    public List<SelectItem> getObjectTypes()    {              this.objectTypes = newGetObjectTypes();        return this.objectTypes;    }    /*     * Función que sirve para cambiar el orden en el que aparece el desplegable con los tipos de contenido     *  Modificar a gusto del consumidor     */    public List<SelectItem> newGetObjectTypes()    {        /*         * En este ejemplo simplemente creo una lista con los valores originales que aparecen          * en el desplegable y los ordeno de tal manera  que el Nuevo Contenido definido          * anteriormente sea el primero de la lista         *         * Modelos que pertenecen a la lista original del desplegable de Añadir Contenido         */        String contentModel = ContentModel.TYPE_CONTENT.toString();        String articleModel = "{http://www.alfresco.org/model/website/1.0}article";        String imageModel = "{http://www.alfresco.org/model/website/1.0}image";        String visitorFeedbackModel = "{http://www.alfresco.org/model/website/1.0}visitorFeedback";        /**         * Lista auxiliar que recibe la lista original del desplegable de Añadir Contenido         */        List<SelectItem> original_objectTypes;        original_objectTypes = new ArrayList<SelectItem>(5);        original_objectTypes = super.getObjectTypes();        /**         * Lista reordenada para el desplegable de Añadir Contenido         */        List<SelectItem> new_objectTypes;        new_objectTypes = new ArrayList<SelectItem>(5);        /*         * Array con los modelos originales de alfresco         */        List<String> codes = Arrays.asList(contentModel,articleModel,imageModel,visitorFeedbackModel);        /*         * Iterador sobre la lista original         */        Iterator itr =  original_objectTypes.iterator();        while(itr.hasNext())        {            SelectItem selectItem = (SelectItem)itr.next();                      if(codes.contains(selectItem.getValue().toString()))            {                new_objectTypes.add(selectItem);            }            else // Si no es un modelo original (si es el modelo que creamos ) se añade en la primera             {       //   posición para que salga por defecto en el desplegable                            new_objectTypes.add(0, selectItem);            }        }        return new_objectTypes;    }}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍



3.2)CustomCreateContentWizard.java

package org.alfresco.module.NewContent;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.Map;import java.io.Serializable;import javax.faces.context.FacesContext;import javax.faces.model.SelectItem;import org.alfresco.model.ContentModel;import org.alfresco.service.cmr.repository.NodeRef;import org.alfresco.web.bean.content.CreateContentWizard;import org.apache.log4j.Logger;@SuppressWarnings({"serial", "unchecked"})public class CustomCreateContentWizard extends CreateContentWizard{          /**    * Log variable    */    private Logger logger = Logger.getLogger(CustomCreateContentWizard.class);    private NodeRef addedCategory;    private List<NodeRef> categories;    public List getCategories(){        return this.categories;    }    public void setCategories(List categories)    {        this.categories = categories;    }    public void setAddedCategory(NodeRef addedCategory)    {        this.addedCategory = addedCategory;    }    public NodeRef getAddedCategory()    {        return this.addedCategory;    }    // ——————————————————————————    // Dialog implementation    @Override    protected String finishImpl(FacesContext context, String outcome) throws Exception    {                outcome = super.finishImpl(context, outcome);        Map updateProps = getNodeService().getProperties(this.createdNode);        updateProps.put(ContentModel.PROP_CATEGORIES, (Serializable)this.categories);        getNodeService().setProperties(this.createdNode, updateProps);        // return default outcome        return outcome;    }    @Override    public void init(Map<String, String> parameters)    {                super.init(parameters);        this.categories = new ArrayList<NodeRef>();        this.addedCategory = null;            }    @Override    public boolean getFinishButtonDisabled()    {     return false;    }    /**    * @return Returns a list of object types to allow the user to select from    */    @Override    public List<SelectItem> getObjectTypes()    {              this.objectTypes = newGetObjectTypes();        return this.objectTypes;    }    /*     *     */    public List<SelectItem> newGetObjectTypes()    {       /* FALTA CÓDIGO PARA REORDENAR EL DESPLEGABLE   *    */    }}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


CARPETA  /source/web/WEB-INF

4.1)faces-config-custom.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"><faces-config>   <!– *************************************************************** –>   <!– Empty JSF config file to prevent errors being thrown during JSF –>   <!– initialisation. Overwrite this file with your custom version.   –>   <!– *************************************************************** –>    <managed-bean>        <description>         The bean that backs up the Add Content Dialog        </description>        <managed-bean-name>AddContentDialog</managed-bean-name>        <managed-bean-class>org.alfresco.module.NewContent.CustomAddContentDialog</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>searchService</property-name>             <value>#{SearchService}</value>        </managed-property>        <managed-property>             <property-name>navigator</property-name>             <value>#{NavigationBean}</value>        </managed-property>        <managed-property>             <property-name>browseBean</property-name>             <value>#{BrowseBean}</value>        </managed-property>        <managed-property>             <property-name>contentService</property-name>             <value>#{ContentService}</value>        </managed-property>        <managed-property>             <property-name>dictionaryService</property-name>             <value>#{DictionaryService}</value>        </managed-property>    </managed-bean>    <managed-bean>      <managed-bean-name>CustomCreateContentWizard</managed-bean-name>      <managed-bean-class>org.alfresco.module.NewContent.CustomCreateContentWizard</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>searchService</property-name>         <value>#{SearchService}</value>      </managed-property>      <managed-property>         <property-name>navigator</property-name>         <value>#{NavigationBean}</value>      </managed-property>      <managed-property>         <property-name>browseBean</property-name>         <value>#{BrowseBean}</value>      </managed-property>      <managed-property>         <property-name>contentService</property-name>         <value>#{ContentService}</value>      </managed-property>      <managed-property>         <property-name>dictionaryService</property-name>         <value>#{DictionaryService}</value>      </managed-property>   </managed-bean>  </faces-config>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

CARPETA  /source/web/jsp/extension

4.2)add-category.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %><%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %><f:verbatim>    <table cellpadding="2" cellspacing="2" border="0" width="100%">        <tr>            <td colspan="2" class="paddingRow"></td>        </tr>        <tr>            <td>                </f:verbatim><h:outputText value="#{msg.categories}" /><f:verbatim>:             </td>            <td width="98%">            </f:verbatim>                <r:multiValueSelector id="multi-category-selector"                value="#{AddContentDialog.categories}"                lastItemAdded="#{AddContentDialog.addedCategory}"                selectItemMsg="#{msg.select_category}"                selectedItemsMsg="#{msg.selected_categories}"                noSelectedItemsMsg="#{msg.no_selected_categories}"                styleClass="multiValueSelector">                <f:subview id="categorySelector">                <r:ajaxCategorySelector id="catSelector" styleClass="selector"                value="#{AddContentDialog.addedCategory}"                label="#{msg.select_category_prompt}" />                </f:subview>                </r:multiValueSelector>            <f:verbatim>            </td>        </tr>        <tr>            <td colspan="2" class="paddingRow"></td>        </tr>    </table></f:verbatim>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

4.3)add-content-dialog.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a"%><%@ taglib uri="/WEB-INF/repo.tld" prefix="r"%><%@ page buffer="32kb" contentType="text/html;charset=UTF-8"%><%@ page isELIgnored="false"%><%@ page import="javax.faces.context.FacesContext"%><%@ page import="org.alfresco.web.app.Application"%><%@ page import="org.alfresco.web.bean.content.AddContentDialog"%><%@ page import="org.alfresco.web.app.servlet.FacesHelper"%><%@ page import="org.alfresco.web.ui.common.PanelGenerator"%><%   boolean fileUploaded = false;   AddContentDialog dialog = (AddContentDialog) FacesHelper.getManagedBean(FacesContext.getCurrentInstance(), "AddContentDialog");   if (dialog != null && dialog.getFileName() != null)   {       fileUploaded = true;   }%><f:verbatim><script type="text/javascript" src="<%=request.getContextPath()%>/scripts/validation.js"> </script><%if (fileUploaded){   PanelGenerator.generatePanelStart(out, request.getContextPath(), "yellowInner", "#ffffcc");   out.write("<img alt='' align='absmiddle' src='");   out.write(request.getContextPath());   out.write("/images/icons/info_icon.gif' />  ");   out.write(dialog.getFileUploadSuccessMsg());   PanelGenerator.generatePanelEnd(out, request.getContextPath(), "yellowInner");   out.write("<div style='padding:2px;'></div>");}%><table cellpadding="2" cellspacing="2" border="0" width="100%"></f:verbatim>   <%      if (fileUploaded == false)      {   %>   <f:verbatim>   <tr>      <td colspan="3" class="wizardSectionHeading"></f:verbatim><h:outputText id="text0" value="#{msg.upload_content}" /><f:verbatim></td>   </tr>   <tr>         <td></f:verbatim>         <h:panelGrid id="upload_panel" columns="2" cellpadding="2" cellspacing="2" border="0" width="100%" columnClasses="panelGridLabelColumn,panelGridValueColumn,panelGridRequiredImageColumn">            <h:outputText value="#{msg.locate_content}" style="padding-left:8px"/>            <f:verbatim/>            <h:outputText id="out_schema" value="#{msg.file_location}:" style="padding-left:8px" />            <r:upload id="uploader" value="#{DialogManager.bean.fileName}" framework="dialog"/>         </h:panelGrid>         <f:verbatim></td>   </tr></f:verbatim>   <%}      if (fileUploaded)      {   %>      <f:verbatim>      <tr>         <td colspan="3">         <table border="0" cellspacing="2" cellpadding="2" class="selectedItems">            <tr>               <td colspan="2" class="selectedItemsHeader"></f:verbatim><h:outputText id="text2" value="#{msg.uploaded_content}" />               <f:verbatim>               </td>            </tr>            <tr>               <td class="selectedItemsRow"></f:verbatim><h:outputText id="text3" value="#{AddContentDialog.fileName}" /><f:verbatim></td>               <td></f:verbatim><a:actionLink image="/images/icons/delete.gif" value="#{msg.remove}" action="#{AddContentDialog.removeUploadedFile}" showLink="false" id="link1" /><f:verbatim></td>            </tr>         </table>         </td>      </tr>      <tr>         <td class="paddingRow"></td>      </tr>      <tr>         <td colspan="3" class="wizardSectionHeading"> </f:verbatim><h:outputText id="text4" value="#{msg.general_properties}" /><f:verbatim></td>      </tr>      <tr>         <td class="paddingRow"></td>      </tr>      <tr>         <td align="middle"></f:verbatim><h:graphicImage id="img0" value="/images/icons/required_field.gif" alt="#{msg.required_field}" /><f:verbatim></td>         <td></f:verbatim><h:outputText id="text5" value="#{msg.name}:" /><f:verbatim></td>         <td width="85%"></f:verbatim><h:inputText id="name" value="#{AddContentDialog.fileName}" maxlength="1024" size="35" onkeyup="checkButtonState();" onchange="checkButtonState();" /><f:verbatim></td>      </tr>      <tr>         <td></td>         <td></f:verbatim><h:outputText id="text6" value="#{msg.type}:" /><f:verbatim></td>         <td></f:verbatim><h:selectOneMenu id="object-type" value="#{AddContentDialog.objectType}">            <f:selectItems value="#{AddContentDialog.objectTypes}" />         </h:selectOneMenu><f:verbatim></td>      </tr>      <tr>         <td></td>         <td></f:verbatim><h:outputText id="text12" value="#{msg.encoding}:" /><f:verbatim></td>         <td></f:verbatim><h:selectOneMenu id="encoding" value="#{AddContentDialog.encoding}">            <f:selectItems value="#{AddContentDialog.encodings}" />         </h:selectOneMenu><f:verbatim></td>      </tr>      <tr>         <td></td>         <td></f:verbatim><h:outputText id="text7" value="#{msg.content_type}:" /><f:verbatim></td>         <td></f:verbatim><r:mimeTypeSelector id="mime-type" value="#{AddContentDialog.mimeType}" /><f:verbatim></td>      </tr>      </f:verbatim>      <%         if (dialog.getOtherPropertiesChoiceVisible())         {      %>      <f:verbatim>      <tr>         <td class="paddingRow"></td>      </tr>      <tr>         <td colspan="3" class="wizardSectionHeading"> </f:verbatim><h:outputText id="text8" value="#{msg.other_properties}" /><f:verbatim></td>      </tr>      <tr>         <td colspan="3">         <table style="padding-top: 2px;">            <tr>               <td colspan="3"></f:verbatim><h:outputText id="text9" value="#{msg.modify_props_help_text}" /><f:verbatim></td>            </tr>            <tr>               <td class="paddingRow"></td>            </tr>            <tr>               <td></f:verbatim><h:selectBooleanCheckbox value="#{AddContentDialog.showOtherProperties}" /><f:verbatim></td>               <td width="100%"></f:verbatim><h:outputText id="text10" value="#{msg.modify_props_when_page_closes}" /><f:verbatim></td>            </tr><%–    AÑADIDO                –%>         </table>         </td>      </tr>      <tr>          <td colspan="3">            <table cellpadding="2" cellspacing="2" border="0" width="100%">                <tr>                    <td colspan="2" class="wizardSectionHeading"> </f:verbatim><h:outputText id="text15" value="#{msg.categories}" /><f:verbatim></td>                </tr>                <tr>                    <td>                    </f:verbatim>                    <h:outputText value="#{msg.categories}" /><f:verbatim>:</td>                    <td width="98%">                        </f:verbatim>                        <r:multiValueSelector id="multi-category-selector"                        value="#{AddContentDialog.categories}"                        lastItemAdded="#{AddContentDialog.addedCategory}"                        selectItemMsg="#{msg.select_category}"                        selectedItemsMsg="#{msg.selected_categories}"                        noSelectedItemsMsg="#{msg.no_selected_categories}"                        styleClass="multiValueSelector">                        <f:subview id="categorySelector">                        <r:ajaxCategorySelector id="catSelector" styleClass="selector"                        value="#{AddContentDialog.addedCategory}"                        label="#{msg.select_category_prompt}" />                        </f:subview>                        </r:multiValueSelector>                        <f:verbatim>                    </td>                </tr>                <tr>                    <td colspan="2" class="paddingRow"></td>                </tr>            </table>          </td>        </tr><%–     FIN AÑADIDO               –%>      </f:verbatim>        <%         }        %><%      }      %>   <f:verbatim></table><script type="text/javascript">      var finishButtonPressed = false;      addEventToElement(window, 'load', pageLoaded, false);      function pageLoaded()      {         document.getElementById("dialog:finish-button").onclick = function() {finishButtonPressed = true; clear_dialog();}      }      function checkButtonState()      {         if (document.getElementById("dialog:dialog-body:name").value.length == 0 )         {            document.getElementById("dialog:finish-button").disabled = true;         }         else         {            document.getElementById("dialog:finish-button").disabled = false;         }      }   </script></f:verbatim>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍


Una vez terminado, nos situamos en el directorio base del proyecto y ejecutamos.

ant‍‍‍

Despues ejecutamos, teniendo en cuenta que las direcciones relativas a los archivos  alfresco-mmt-3.3g.jar  y alfresco.war
Para más opciones http://wiki.alfresco.com/wiki/Module_Management_Tool

java -jar alfresco-mmt-3.3g.jar install build/dist/NewModule.amp alfresco.war -verbose‍‍‍


Ahora ya tenemos nuestro nuevo módulo dentro del archivo war, con lo que lo copiamos en el directorio $TOMCAT_HOME/webapps y arrancamos tomcat.


Espero que os sea útil y que no haya ningún problema con este código.

Un saludo
1 REPLY 1

cristinamr
World-Class Innovator
World-Class Innovator
Muchas gracias por el aporte Smiley Wink ¡Seguro que a más de uno nos viene bien!

Oye una cosa: Podrías editar el titulo de tu post e indicar que es un tutorial? Así su búsqueda será más sencilla.

¡Un saludo!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc