cancel
Showing results for 
Search instead for 
Did you mean: 

CAMBIAR ASPECTO DE ALFRESCO EXPLORER

dfernandezgonza
Champ in-the-making
Champ in-the-making
Hola buenas, he creado un AMP para cambiar el aspecto de Alfresco Explorer, partiendo del codigo de

http://aboutalfresco.blogspot.com/2010/04/creating-new-alfresco-module-to-change.html

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="Cambiar Aspecto" 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=NewModule
lib.name=NewModule

1.3) module.properties


module.id=org.alfresco.module.NewAspect
module.title=NewAspect Project
module.description=NewAspect Project to build an amp file
module.version=1.0

1.4) file-mapping.properties


include.default=true
/web/WEB-INF=/WEB-INF
/web/images/MySite=/images/MySite

CARPETA  /source/web/images/MySite


Aquí van nuestras imágenes propias

CARPETA  /source/java/org/alfresco/web/ui/repo/tag/

PageTag.java


package org.alfresco.web.ui.repo.tag;

import java.io.IOException;
import java.io.Writer;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.coci.CCProperties;
import org.alfresco.web.config.ClientConfigElement;
import org.alfresco.web.ui.common.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class PageTag extends TagSupport
{
   private static final long serialVersionUID = 8142765393181557228L;

   private final static String SCRIPTS_START = "<script type=\"text/javascript\" src=\"";
   private final static String SCRIPTS_END   = "\"></script>\n";
   private final static String STYLES_START  = "<link rel=\"stylesheet\" href=\"";
   private final static String STYLES_MAIN   = "\" type=\"text/css\">\n";

   private final static String[] SCRIPTS =
   {
      // menu javascript
      "/scripts/menu.js",
      // webdav javascript
      "/scripts/webdav.js",
      // base yahoo file
      "/scripts/ajax/yahoo/yahoo/yahoo-min.js",
      // io handling (AJAX)
      "/scripts/ajax/yahoo/connection/connection-min.js",
      // event handling
      "/scripts/ajax/yahoo/event/event-min.js",
      // mootools
      "/scripts/ajax/mootools.v1.11.js",
      // common Alfresco util methods
      "/scripts/ajax/common.js",
      // pop-up panel helper objects
      "/scripts/ajax/summary-info.js",
      // ajax pickers
      "/scripts/ajax/picker.js",
      "/scripts/ajax/tagger.js",
       // validation handling
       "/scripts/validation.js"
   };

   private final static String[] CSS =
   {
      "/css/main.css",
      "/css/picker.css"
   };

/**
* Please ensure you understand the terms of the license before changing the contents of this file.
*/

   private final static String ALF_LOGO_HTTP  = "/alfresco/images/MySite/my_footer.png";
   private final static String ALF_LOGO_HTTPS = "/alfresco/images/MySite/my_footer.png";
   private final static String ALF_URL   = "http://www.mysite.es";
   private final static String ALF_TEXT  = "My Community";
   private final static String ALF_COPY  = "Supplied free of charge with " +
        "<a class='footer' href='http://www.alfresco.com/services/support/communityterms/#support'>no support</a>, " +
        "<a class='footer' href='http://www.alfresco.com/services/support/communityterms/#certification'>no certification</a>, " +
        "<a class='footer' href='http://www.alfresco.com/services/support/communityterms/#maintenance'>no maintenance</a>, " +
        "<a class='footer' href='http://www.alfresco.com/services/support/communityterms/#warranty'>no warranty</a> and " +
        "<a class='footer' href='http://www.alfresco.com/services/support/communityterms/#indemnity'>no indemnity</a> by " +
        "<a class='footer' href='http://www.alfresco.com'>Alfresco</a> or its " +
        "<a class='footer' href='http://www.alfresco.com/partners/'>Certified Partners</a>. " +
        "<a class='footer' href='http://www.alfresco.com/services/support/'>Click here for support</a>. " +
        "Alfresco Software Inc. &copy; 2005-2010 All rights reserved.";

   private final static Log logger = LogFactory.getLog(PageTag.class);
   private static String alfresco = null;
   private static String loginPage = null;

   private long startTime = 0;
   private String title;
   private String titleId;
   private String doctypeRootElement;
   private String doctypePublic;
   private String doctypeSystem;

   /**
    * @return The title for the page
    */
   public String getTitle()
   {
      return title;
   }

   /**
    * @param title Sets the page title
    */
   public void setTitle(String title)
   {
      this.title = title;
   }

   /**
    * @return The title message Id for the page
    */
   public String getTitleId()
   {
      return titleId;
   }

   /**
    * @param titleId Sets the page title message Id
    */
   public void setTitleId(String titleId)
   {
      this.titleId = titleId;
   }

   public String getDoctypeRootElement()
   {
      return this.doctypeRootElement;
   }

   public void setDoctypeRootElement(final String doctypeRootElement)
   {
      this.doctypeRootElement = doctypeRootElement;
   }

   public String getDoctypePublic()
   {
      return this.doctypePublic;
   }

   public void setDoctypePublic(final String doctypePublic)
   {
      this.doctypePublic = doctypePublic;
   }

   public String getDoctypeSystem()
   {
      return this.doctypeSystem;
   }

   public void setDoctypeSystem(final String doctypeSystem)
   {
      this.doctypeSystem = doctypeSystem;
   }

   public void release()
   {
      super.release();
      this.title = null;
      this.titleId = null;
      this.doctypeRootElement = null;
      this.doctypeSystem = null;
      this.doctypePublic = null;
   }

   /**
    * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
    */
   public int doStartTag() throws JspException
   {
      if (logger.isDebugEnabled())
         startTime = System.currentTimeMillis();
      logger.debug("Dentro de PageTag.java");
      try
      {
         String reqPath = ((HttpServletRequest)pageContext.getRequest()).getContextPath();
         Writer out = pageContext.getOut();

         if (!Application.inPortalServer())
         {
            if (this.getDoctypeRootElement() != null &&
                this.getDoctypePublic() != null)
            {
               out.write("<!DOCTYPE ");
               out.write(this.getDoctypeRootElement().toLowerCase());
               out.write(" PUBLIC \"" + this.getDoctypePublic() + "\"");
               if (this.getDoctypeSystem() != null)
               {
                  out.write(" \"" + this.getDoctypeSystem() + "\"");
               }
               out.write(">\n");
            }
            else
            {
               out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n");
               out.write("    \"http://www.w3.org/TR/html4/loose.dtd\">\n");
            }
            out.write("<html><head>");
            out.write("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7\" />\n");
            out.write("<title>");
            if (this.titleId != null && this.titleId.length() != 0)
            {
               out.write(Utils.encode(Application.getMessage(pageContext.getSession(), this.titleId)));
            }
            else if (this.title != null && this.title.length() != 0)
            {
               out.write(Utils.encode(this.title));
            }
            else
            {
               out.write("Alfresco Web Client");
            }
            out.write("</title>\n");
            out.write("<link rel=\"search\" type=\"application/opensearchdescription+xml\" href=\"" + reqPath +
                      "/wcservice/api/search/keyword/description.xml\" title=\"Alfresco Keyword Search\">\n");
            out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n");
         }

         // CSS style includes
         for (final String css : PageTag.CSS)
         {
            out.write(STYLES_START);
            out.write(reqPath);
            out.write(css);
            out.write(STYLES_MAIN);
         }

         // JavaScript includes
         for (final String s : PageTag.SCRIPTS)
         {
            out.write(SCRIPTS_START);
            out.write(reqPath);
            out.write(s);
            out.write(SCRIPTS_END);
         }

         out.write("<script type=\"text/javascript\">"); // start - generate naked javascript code

         // get client config to determine how the JavaScript setContextPath should behave
         ClientConfigElement clientConfig = Application.getClientConfig(pageContext.getServletContext());

         // set the context path used by some Alfresco script objects
         if (clientConfig != null && clientConfig.getCheckContextAgainstPath())
         {
            out.write("setCheckContextAgainstPath(true);");
         }
         out.write("setContextPath('");
         out.write(reqPath);
         out.write("');");

         // generate window onload code
         generateWindowOnloadCode(out);

         out.write("</script>\n"); // end - generate naked javascript code

         if (!Application.inPortalServer())
         {
            out.write("</head>");
            out.write("<body>\n");
         }
      }
      catch (IOException ioe)
      {
         throw new JspException(ioe.toString());
      }

      return EVAL_BODY_INCLUDE;
   }

   /**
    * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
    */
   public int doEndTag() throws JspException
   {
      try
      {
         HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
         if (req.getRequestURI().endsWith(getLoginPage()) == false)
         {
            pageContext.getOut().write(getAlfrescoButton());
         }

         if (!Application.inPortalServer())
         {
            pageContext.getOut().write("\n</body></html>");
         }
      }
      catch (IOException ioe)
      {
         throw new JspException(ioe.toString());
      }

      if (logger.isDebugEnabled())
      {
         long endTime = System.currentTimeMillis();
         logger.debug("Time to generate page: " + (endTime - startTime) + "ms");
      }

      return super.doEndTag();
   }

   private String getLoginPage()
   {
      if (PageTag.loginPage == null)
      {
         PageTag.loginPage = Application.getLoginPage(pageContext.getServletContext());
      }

      return PageTag.loginPage;
   }

/**
* Please ensure you understand the terms of the license before changing the contents of this file.
*/

   private String getAlfrescoButton()
   {
      if (PageTag.alfresco == null)
      {
         final HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
         PageTag.alfresco = ("<center><table style='margin: 0px auto;'><tr><td>" +
                             "<a href='" + ALF_URL + "'>" +
                             "<img style='vertical-align:middle;border-width:0px;' width='176' height='26' alt='' title='" + ALF_TEXT +
                             "' src='" + ("http".equals(req.getScheme()) ? ALF_LOGO_HTTP : ALF_LOGO_HTTPS) +
                             "'>" +"</a></td><td align='center'>" +
                             "<span class='footer'>" + ALF_COPY +
                             "</span></td><td></td></tr></table></center>");
      }
      return PageTag.alfresco;
   }

   /**
    * This method generate code for setting window.onload reference as
    * we need to open WebDav or CIFS URL in a new window.
    *
    * Executes via javascript code(function onloadFunc()) in "onload.js" include file.
    *
    * @return Returns window.onload javascript code
    */
   private static void generateWindowOnloadCode(Writer out)
      throws IOException
   {
      FacesContext fc = FacesContext.getCurrentInstance();
      if (fc != null)
      {
          CCProperties ccProps = (CCProperties)FacesHelper.getManagedBean(fc, "CCProperties");
          if (ccProps.getWebdavUrl() != null || ccProps.getCifsPath() != null)
          {
             out.write("window.onload=function(){onloadFunc(\"");
             if (ccProps.getWebdavUrl() != null)
             {
                out.write(ccProps.getWebdavUrl());
             }
             out.write("\",\"");
             if (ccProps.getCifsPath() != null)
             {
                String val = ccProps.getCifsPath();
                val = Utils.replace(val, "\\", "\\\\");   // encode escape character
                out.write(val);
             }
             out.write("\");};");

             // reset session bean state
             ccProps.setCifsPath(null);
             ccProps.setWebdavUrl(null);
          }
      }
   }
}




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

venzia
Star Collaborator
Star Collaborator
Muy buenos aportes! .. gracias de parte de la comunidad!!  :wink: