getElementsByName

cancel
Showing results for 
Search instead for 
Did you mean: 
_valerio_
Member II

getElementsByName

ciao a tutti
vorrei aggiugere alle API javascript di alfresco il metodo getElementsByName()  per usarlo nel seguente modo: document.content.getElementsByName(nome_elemento)

ho letto il wiki http://wiki.alfresco.com/wiki/3.2_JavaScript_API#Adding_Custom_Script_APIs ma non mi sono chiare alcune cose:
-quali files devo modificare?  (oltre a script-services-context.xml in cui inserire il bean)
-per inserire il metodo getElementsByName() devo per forza modificare il file script-services-context.xml oppure posso semplicemente aggiungere il metodo ad un file già esistente (tipo aggiungerlo in coda ad una classe già presente)

per favore aiutatemi perchè ho davvero bisogno di poter utilizzare tale metodo.
Grazie a quanti vorranno rispondere!
8 Replies
_valerio_
Member II

Re: getElementsByName

Ancora nessuna risposta,  Smiley Sad   speravo proprio che qualcuno potesse darmi una mano
openpj
Moderator
Moderator

Re: getElementsByName

Io estenderei una classe esistente di Alfresco, e farei l'override dello spring context referenziando la classe estesa.
Senza cambiare il file di Spring di Alfresco, ma creandone uno che fa l'override di quello esistente.
Questo tipicamente è il modo più pulito di lavorare con Spring.

Hope this helps.
_valerio_
Member II

Re: getElementsByName

Io estenderei una classe esistente di Alfresco, e farei l'override dello spring context referenziando la classe estesa.
Senza cambiare il file di Spring di Alfresco, ma creandone uno che fa l'override di quello esistente.
Questo tipicamente è il modo più pulito di lavorare con Spring.

Hope this helps.

Innanzitutto MILLE GRAZIE per la risposta Smiley Very Happy  OpenPj, ormai non ci speravo più!
in secondo luogo, dal momento che sono ad un livello molto meno avanzato del tuo per quanto concerne la conoscenza della programmazione :cry: , ti chiederei cortesemente di descrivere la procedura per fare quello che mi hai consigliato, anche perchè il wiki è molto generico sull'argomento ed in giro non ho trovato del materiale utile. Ho letto la procedura in http://wiki.alfresco.com/wiki/Overriding_Spring_Configuration, ma non penso che sia quello che mi hai suggerito tu (ecco perchè ti chiedo maggiori spiegazioni).

Grazie ancora
openpj
Moderator
Moderator

Re: getElementsByName

Devi installare nel tuo IDE l'Alfresco SDK ed associare tutti i sorgenti alle relative librerie:
http://wiki.alfresco.com/wiki/Alfresco_SDK

Poi devi creare una classe java che estende l'opportuna classe dichiarata nello Spring context di Mozilla Rhino, quindi la devi impacchettare in un jar e la devi aggiungere al classpath di Alfresco (copiando il jar all'interno di WEB-INF/lib). Ma questa è la procedura per sviluppare, in produzione dovresti consegnare comunque un Alfresco Module Package (AMP) con tutte le customizzazioni fatte:
http://wiki.alfresco.com/wiki/Packaging_And_Deploying_Extensions

Per creare l'AMP puoi usare il progetto di esempio SDK BasicAMP presente nella SDK di Alfresco, oppure l'archetype Maven:
http://wiki.alfresco.com/wiki/Managing_Alfresco_Lifecyle_with_Maven

Infine devi dichiarare il nuovo Spring context da dichiarare dentro il classloader condiviso dell'application server per fare l'overriding dei bean coinvolti.

Hope this helps.
_valerio_
Member II

Re: getElementsByName

Ancora un ringraziamento OpenPj per l'aiuto che mi stai dando

Devi installare nel tuo IDE l'Alfresco SDK ed associare tutti i sorgenti alle relative librerie

ho installato nell'IDE (eclipse) la SDK ed ho importato tutte le librerie (tranne la remote-api-doc che non c'è nel mio sdke la web-client-doc in cui mancano dei files); fin quì tutto (quasi) OK.

Poi devi creare una classe java che estende l'opportuna classe dichiarata nello Spring context di Mozilla Rhino
in che file trovo la classe da estendere (intendo quella dichiarata nello Spring context di Mozilla Rhino)? forse è una di quelle che stanno nel file tomcat\webapps\alfresco\WEB-INF\classes\alfresco\public-services-context.xml? te lo chiedo perchè io non trovatoin altri file delle classi che potessero fare al caso mio.
In ogni caso, se entro in eclipse e navigo in SDK Alfresco Embedded->Refernced Libraries->alfresco-core-3.2r2.jar->org.alfresco.util c'è una classe che si chiama Content.class che sembrerebbe fare al caso mio
/*
* Copyright (C) 2005-2007 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
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception.  You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;


/**
* Content
*
* @author dcaruana
*/
public interface Content
{
   /**
    * Gets content as a string
    *
    * @return  content as a string
    * @throws IOException
    */
    public String getContent() throws IOException;

    /**
     * Gets the content mimetype
     *
     * @return mimetype
     */
    public String getMimetype();
   
    /**
     * Gets the content encoding
     *
     * @return  encoding
     */
    public String getEncoding();
   
    /**
     * Gets the content length (in bytes)
     *
     * @return  length
     */
    public long getSize();

    /**
     * Gets the content input stream
     *
     * @return  input stream
     */
    public InputStream getInputStream();

    /**
     * Gets the content reader (which is sensitive to encoding)
     *
     * @return
     */
    public Reader getReader() throws IOException;
}

tuttavia eclipse non me la fa editare,cioè non mi fa aggiungere la seguente riga

public InputStream getElementsByName();



Infine devi dichiarare il nuovo Spring context da dichiarare dentro il classloader condiviso dell'application server per fare l'overriding dei bean coinvolti.
intendi dire di inserire il bean in tomcat\webapps\alfresco\WEB-INF\classes\alfrescoscript-services-context.xml? tipo nel modo seguente?
   
<bean id="nomeclasse" parent="baseJavaScriptExtension" class=" qualcosa  ">
        <property name="extensionName">
            <value>oggetto</value>
        </property>
</bean>
openpj
Moderator
Moderator

Re: getElementsByName

ho installato nell'IDE (eclipse) la SDK ed ho importato tutte le librerie (tranne la remote-api-doc che non c'è nel mio sdke la web-client-doc in cui mancano dei files); fin quì tutto (quasi) OK.
Per poter avere le classi devi solo importare i sorgenti, il javadoc è già incluso nei sorgenti e quindi ad esempio il file remote-api-doc non ti serve.
Importa solo i sorgenti.

<bean id="nomeclasse" parent="baseJavaScriptExtension" class=" qualcosa  ">
        <property name="extensionName">
            <value>oggetto</value>
        </property>
</bean>
Esatto. Poiché hai importato i sorgenti di Alfresco, avrai anche disponibili le classi dichiarate nello spring context dedicate a Rhino.

HTH.
_valerio_
Member II

Re: getElementsByName

Esatto. Poiché hai importato i sorgenti di Alfresco, avrai anche disponibili le classi dichiarate nello spring context dedicate a Rhino.
HTH.
si, ma eclipse non mi fa modificare le classi,perciò mi chiedo come faccio ad importare il metodo getElementsByName
_valerio_
Member II

Re: getElementsByName

ciao OpenPj ti descrivo quello che sono riuscito ad implementare:
sono riuscito a creare un file java che ho chiamato Contenuto.java, che (secondo me) aggiunge il metodo getElementsByName, che ha il seguente codice:

/*
* @Author: Valerio
*/
package org.alfresco.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;


/**
* Content
*
* @author valerio
*/
public interface Contenuto
{
   /**
    * Gets content as a string
    *
    * @return  content as a string
    * @throws IOException
    */
    public String getContent() throws IOException;

    /**
     * Gets the content mimetype
     *
     * @return mimetype
     */
    public String getMimetype();
    /**
     * Gets the element specified
     *
     * @return element
     */
    public String getElementsByName();
   
    /**
     * Gets the content encoding
     *
     * @return  encoding
     */
    public String getEncoding();
   
    /**
     * Gets the content length (in bytes)
     *
     * @return  length
     */
    public long getSize();

    /**
     * Gets the content input stream
     *
     * @return  input stream
     */
    public InputStream getInputStream();

    /**
     * Gets the content reader (which is sensitive to encoding)
     *
     * @return
     */
    public Reader getReader() throws IOException;
}



successivamente ho usato il programma (open source) DJ Java Decompiler 3.11 per creare il file Contenuto.class

//file: contenuto.java


package org.alfresco.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.lang.Object;
import java.lang.String;

public abstract interface contenuto
{
   //method
   public abstract String getContent() throws IOException;
   public abstract String getMimetype();
   public abstract String getElementsByName();
   public abstract String getEncoding();
   public abstract long getSize();
   public abstract InputStream getInputStream();
   public abstract Reader getReader() throws IOException;
}


ho anche preparato il bean da inserire nel file script-services-context.xml, in cui non so come completare il campo "class":


<bean id="Contenuto" parent="baseJavaScriptExtension" class="?????">
    <property name="extensionName">
        <value>cont</value>  <!–così facendo dovrei poter utilizzare il metodo document.cont.getElementsByName(nomedell'elemento)–>
    </property>
</bean>

ancora però non ho capito, nonostante abbia letto le pagine del wiki che mi hai consigliato, come creare il file jar(mi chiede di inserire un metodo main che io non ho sviluppato e poi non so se devo mettere solo il file .class o anche il file.java), creare l'AMP ed importare tutto in alfresco.