ORM API

Afin de manipuler les entités de beCPG, il existe un outil de mapping entre les modèles Alfresco et les objets Java Pojo.

En effet, il permet de mapper les objets Java Pojo avec les modèles de données Alfresco et utilise l'API Java pour manipuler ces objets. Le mapping est basé sur 5 annotations Java.

Un ensemble d'annotations représente les propriétés et les associations d'Alfresco:

@AlfQname --> Spécifie le qName d'Alfresco
@AlfType --> Correspond à un type Alfresco
@AlfProp --> Correspond à des propriétés Alfresco
@AlfMlText -->  Correspond à des propriétés mltext précises

@AlfSingleAssoc --> Correspond à une unique association cible
@AlfMultiAssoc --> Correspond à plusieurs associations cibles
@AlfEnforced --> Enregistre le champ même s'il est nul
@AlfReadOnly --> N'enregistre pas les propriétés

Il existe également un ensemble d'annotations représentant les datalists de beCPG:

@DataList
@DataListIdentifierAttr
@DataListView
@MultiLevelDataList
...

Nous voulons, par exemple, créer et manipuler des objects de type "deliverable".

  • Créer le modèle de données Alfresco:
            <type name="pjt:deliverable">
                <properties>
                    <property name="pjt:dlDescription">
                        <type>d:text</type>
                        <mandatory>true</mandatory>
                    </property>
                    <property name="pjt:dlState">
                        <type>d:text</type>
                        <constraints>
                            <constraint ref="pjt:deliverableStates" />
                        </constraints>
                    </property>
                    <property name="pjt:dlUrl">
                        <type>d:text</type>
                    </property>
                </properties>
                <associations>
                    <association name="pjt:dlTask">
                        <source>
                            <mandatory>true</mandatory>
                            <many>true</many>
                        </source>
                        <target>
                            <class>pjt:taskList</class>
                            <mandatory>true</mandatory>
                            <many>false</many>
                        </target>
                    </association>
                    <association name="pjt:dlContent">
                        <source>
                            <mandatory>false</mandatory>
                            <many>true</many>
                        </source>
                        <target>
                            <class>cm:content</class>
                            <mandatory>false</mandatory>
                            <many>false</many>
                        </target>
                    </association>
                </associations>
            </type>
  • Créer l'objet Java correspondant avec les annotations beCPG.
    La classe devrait hériter de BeCPGDataObject. Les méthodes setters, hashCode, equals et toString doivent être déclarées.
    @AlfType
    @AlfQname(qname = "pjt:deliverable")
    public class Deliverable extends BeCPGDataObject {

        private NodeRef task;
        private DeliverableState state = DeliverableState.Planned;
        private String description;
        private String url;
        private Integer completionPercent = 0;
        private NodeRef content;

        @AlfSingleAssoc
        @AlfQname(qname = "pjt:dlTask")
        public NodeRef getTask() {
            return task;
        }

        @AlfProp
        @AlfQname(qname = "pjt:dlUrl")
        public String getUrl() {
            return url;
         }

        @AlfProp
        @AlfQname(qname = "pjt:dlState")
         public DeliverableState getState() {
            return state;
         }


        @AlfProp
        @AlfQname(qname = "pjt:dlDescription")
        public String getDescription() {
            return description;
        }

        @AlfProp
        @AlfQname(qname = "pjt:completionPercent")
        public Integer getCompletionPercent() {
            return completionPercent;
        }

        @AlfSingleAssoc
        @AlfQname(qname = "pjt:dlContent")
        public NodeRef getContent() {
            return content;
        }
       ...
    }
  • Enfin, utiliser la classe AlfrescoRepository afin d'effectuer les opérations CRUD (création, lecture, mise à jour, supression) sur l'objet Java créé.
    public class TestORM {
     @Resource
     protected AlfrescoRepository<Deliverable> alfrescoRepository;
     @Test
     public void test() {
            //CRUD
            Deliverable deliverable = new Deliverable();            
            deliverable.setParentNodeRef(getParentNodeRef());

            //Create
            alfrescoRepository.save(deliverable);            
            NodeRef deliverableNodeRef = deliverable.getNodeRef();

            //Retrieve
            deliverable = alfrescoRepository.findOne(deliverableNodeRef);            
            deliverable.setDescription("Test");
            //Update
            alfrescoRepository.save(deliverable);        }
       ...
    }

results matching ""

    No results matching ""