Ticket #2423: extract-template-autoactions.patch

File extract-template-autoactions.patch, 36.8 KB (added by deni, 15 years ago)
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateGroupForTemplate.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
     1package org.sophie2.main.app.commons.actions; 
     2 
     3import org.sophie2.base.commons.util.ImmList; 
     4import org.sophie2.base.commons.util.NaiveImmList; 
     5import org.sophie2.base.model.book.interfaces.CompositeElement; 
     6import org.sophie2.base.model.book.resource.r4.ElementGroupR4; 
     7import org.sophie2.base.model.book.timelines.ActivationChannel; 
     8import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     9import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     10import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
     11import org.sophie2.base.model.resources.r4.keys.Key; 
     12import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     13import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
     14import org.sophie2.base.skins.Message; 
     15 
     16/** 
     17 * An {@link AutoAction} that creates a new empty group by given template.  
     18 *  
     19 * @author deni 
     20 */ 
     21public final class CreateGroupForTemplate extends AutoAction { 
     22 
     23        private final String groupTitle; 
     24        private final ResourceRefR4 groupRef; 
     25        private final ResourceRefR4 groupToTemplateRef; 
     26        private final NaiveImmList<TemplatedKey<?>> keys; 
     27        private final ImmList<ActivationChannel> parentElements; 
     28 
     29        /** 
     30         * Creates a new <code>CreateGroupForTemplate</code>. 
     31         *  
     32         * @param description 
     33         *              The description of the new <code>AutoAction</code>. 
     34         * @param significant 
     35         *              The significance of the new <code>AutoAction</code>. 
     36         * @param groupTitle 
     37         *              The title of the group to create. 
     38         * @param groupRef 
     39         *              A child reference to the group to create. 
     40         * @param groupToTemplateRef 
     41         *              A reference from the group that will be created to the template it should use. 
     42         * @param keys 
     43         *              The list of keys whose mode should be set to USE_TEMPLATE. 
     44         * @param parentElements 
     45         *              The current children of the parent of the new group. 
     46         */ 
     47        public CreateGroupForTemplate(Message description, boolean significant, String groupTitle, 
     48                        ResourceRefR4 groupRef, ResourceRefR4 groupToTemplateRef, 
     49                        NaiveImmList<TemplatedKey<?>> keys, ImmList<ActivationChannel> parentElements) { 
     50                super(description, significant); 
     51                this.groupTitle = groupTitle; 
     52                this.groupRef = groupRef; 
     53                this.groupToTemplateRef = groupToTemplateRef; 
     54                this.keys = keys; 
     55                this.parentElements = parentElements; 
     56        } 
     57 
     58        @Override 
     59        public void performAuto() { 
     60                ResourceChanger ch = getChanger(); 
     61                ch.makeResource(this.groupRef); 
     62                ch.setRaw(CompositeElement.KEY_SUB_ELEMENTS,  
     63                                this.parentElements.add(new ActivationChannel(this.groupRef))); 
     64 
     65                ResourceChanger groupCh = ch.getSub(this.groupRef); 
     66                groupCh.setRaw(ResourceR4.KEY_KIND, ElementGroupR4.KIND); 
     67                groupCh.setRaw(ResourceR4.KEY_TITLE, this.groupTitle); 
     68 
     69                groupCh.setRaw(ResourceR4.KEY_TEMPLATE, this.groupToTemplateRef); 
     70                for (Key<?> key : this.keys) { 
     71                        groupCh.setRaw(key, null); 
     72                } 
     73        } 
     74} 
     75 No newline at end of file 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/util/TemplateUtil.java

     
    99import org.sophie2.base.commons.util.ImmList; 
    1010import org.sophie2.base.commons.util.ImmMap; 
    1111import org.sophie2.base.commons.util.NaiveImmList; 
    12 import org.sophie2.base.commons.util.ImmMap.ImmEntry; 
    1312import org.sophie2.base.model.book.AutoActionsUtil; 
    1413import org.sophie2.base.model.book.BookH; 
    1514import org.sophie2.base.model.book.ElementGroupH; 
     
    2120import org.sophie2.base.model.book.interfaces.MemberElement; 
    2221import org.sophie2.base.model.book.interfaces.ResourceFrame; 
    2322import org.sophie2.base.model.book.resource.r4.BookR4; 
    24 import org.sophie2.base.model.book.resource.r4.ElementGroupR4; 
    2523import org.sophie2.base.model.book.timelines.ActivationChannel; 
    2624import org.sophie2.base.model.resources.r4.ResourceRefList; 
    2725import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     
    3432import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    3533import org.sophie2.base.skins.Message; 
    3634import org.sophie2.base.visual.VisualElement; 
     35import org.sophie2.main.app.commons.actions.ApplyFrameTemplateAction; 
     36import org.sophie2.main.app.commons.actions.ApplyTemplateAction; 
     37import org.sophie2.main.app.commons.actions.CreateFrameByTemplateAction; 
     38import org.sophie2.main.app.commons.actions.CreateGroupForTemplate; 
     39import org.sophie2.main.app.commons.actions.CreateTemplateAction; 
    3740import org.sophie2.main.app.commons.app.AppMainWindow; 
    3841import org.sophie2.main.app.commons.book.BookView; 
    3942import org.sophie2.main.app.commons.element.ElementView; 
     
    116119         * @param isSign 
    117120         *                              The significance of the change that creates it. 
    118121         * @param createDefaultTemplate  
    119          *              True if the template will  be used as a default one, false otherwise. 
     122         *              True if the template will be used as a default one, false otherwise. 
    120123         */ 
    121124        public static void createTemplate(final String templateTitle, 
    122125                        final ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys, 
     
    157160                final ResourceRefList templates = book.get(templatesKey); 
    158161                final ResourceRefR4 relativeRef =  
    159162                        ResourceRefR4.getRelativeRef(bookAccess.getRef(), ref);  
    160                 final String kind = templatedElement.model().get().getKind(); 
    161163                final ResourceRefList newTemplates =  
    162164                        templates.contains(templateRef) ? templates : templates.add(templateRef); 
    163165 
     
    182184                 * the unneeded sub-elements (also removes their activation channels from the  
    183185                 * corresponding parent's KEY_SUB_ELEMENTS key). 
    184186                 */ 
    185                 new AutoAction(description, true) { 
    186                         @Override 
    187                         public void performAuto() { 
    188                                 getChanger().copyResource(relativeRef, templateRef); 
    189                                 getChanger().setRaw(templatesKey, newTemplates); 
    190  
    191                                 ResourceChanger subCh = getChanger().getSub(templateRef); 
    192  
    193                                 subCh.setRaw(ResourceR4.KEY_TITLE, templateTitle); 
    194                                 subCh.setRaw(ResourceR4.KEY_KIND, kind); 
    195  
    196                                 if (resourcesKeys != null) { 
    197                                         for (ImmEntry<ResourceRefR4, ImmList<Key<?>>> entry : resourcesKeys) { 
    198                                                 ResourceChanger subChanger =  
    199                                                         (entry.getKey().equals(ref) ? subCh : subCh.getSub (entry.getKey())); 
    200  
    201                                                 for (Key<?> key : entry.getValue()) { 
    202                                                         subChanger.setRaw(((TemplatedKey<?>) key).getApplyKey(), false); 
    203                                                 }                
    204                                         } 
    205                                 } 
    206  
    207                                 if(createDefaultTemplate) { 
    208                                         getChanger().setRaw(defaultTemplateKey, templateRef); 
    209                                 } 
    210  
    211                                 for (ResourceRefR4 iterRef : finalRootsToDelete) { 
    212                                         ResourceRefR4 parent = iterRef.getParentRef(), parentToIterRef = ResourceRefR4.getRelativeRef(parent, iterRef); 
    213                                         ResourceChanger parentChanger = subCh.getSub(parent); 
    214  
    215                                         ImmList<ActivationChannel> channels = parentChanger.getRaw(CompositeElement.KEY_SUB_ELEMENTS); 
    216  
    217                                         for (ActivationChannel channel : channels) { 
    218                                                 ResourceRefR4 elRes = channel.getElementResource(); 
    219  
    220                                                 if (elRes.equals(parentToIterRef) ) { 
    221                                                         channels = channels.remove(channel); 
    222                                                         break; 
    223                                                 } 
    224                                         } 
    225                                         parentChanger.setRaw(CompositeElement.KEY_SUB_ELEMENTS, channels); 
    226  
    227                                         subCh.removeResource(iterRef);   
    228                                 } 
    229                         } 
    230                 }.register(bookAccess); 
     187                new CreateTemplateAction(description, true, ref, createDefaultTemplate, resourcesKeys, 
     188                                newTemplates, relativeRef, templateRef, templateTitle, templatesKey, 
     189                                defaultTemplateKey, finalRootsToDelete).register(bookAccess); 
    231190        } 
    232191 
    233192        /** 
     
    390349                // template page properties other than page elements 
    391350                final ImmList<TemplatedKey<?>> pageImmKeys = templateH.getApplicableTemplatedKeys(); 
    392351 
    393                 new AutoAction(Message.create(APPLY_PAGE_TEMPLATE), false) { 
    394                         @Override 
    395                         public void performAuto() { 
    396                                 ResourceChanger ch = getChanger(); 
    397                                 ch.setRaw(ResourceR4.KEY_TEMPLATE, pageToTemplateRef); 
     352                new ApplyTemplateAction(Message.create(APPLY_PAGE_TEMPLATE), false,  
     353                                pageToTemplateRef, pageImmKeys).register(page.getAccess()); 
    398354 
    399                                 for (TemplatedKey<?> key : pageImmKeys) { 
    400                                         ch.setRaw(key, null); 
    401                                         ch.setRaw(key.getLockKey(), false); 
    402                                 } 
    403                         } 
    404                 }.register(page.getAccess()); 
    405  
    406355                // template page elements 
    407356                List<ResourceRefR4> elementsToCreate = list != null ? list : new ArrayList<ResourceRefR4>(); 
    408357                Map<ResourceRefR4, ResourceRefR4> existingElelements =  
     
    446395                                final ResourceRefR4 groupToTemplateRef =  
    447396                                        ResourceRefR4.getRelativeRef(groupAccess.getRef(), templateH.getRef()); 
    448397 
    449                                 new AutoAction(Message.create(TEMPLATE_GROUP), false) { 
    450  
    451                                         @Override 
    452                                         public void performAuto() { 
    453                                                 ResourceChanger ch = getChanger(); 
    454                                                 ch.setRaw(ResourceR4.KEY_TEMPLATE, groupToTemplateRef); 
    455                                                 for (Key<?> key : keys) { 
    456                                                         ch.setRaw(key, null); 
    457                                                 } 
    458                                         } 
    459  
    460                                 }.register(groupAccess); 
     398                                new ApplyTemplateAction(Message.create(TEMPLATE_GROUP), false, groupToTemplateRef, 
     399                                                keys).register(groupAccess); 
    461400                        } 
    462401 
    463402                        ResourceAccess groupAccess = parent.getAccess().open(nextParentRef, null); 
     
    489428                                ResourceRefR4.getRelativeRef(parent.getRef(), templateH.getRef())); 
    490429                final NaiveImmList<TemplatedKey<?>> keys = templateH.getApplicableTemplatedKeys(); 
    491430 
     431                new CreateGroupForTemplate(Message.create(CREATE_GROUP_FOR_TEMPLATE), false, groupTitle, 
     432                                groupRef, groupToTemplateRef, keys, parentElements).register(parent.getAccess()); 
    492433 
    493                 new AutoAction(Message.create(CREATE_GROUP_FOR_TEMPLATE), false) { 
    494  
    495                         @Override 
    496                         public void performAuto() { 
    497                                 ResourceChanger ch = getChanger(); 
    498                                 ch.makeResource(groupRef); 
    499                                 ch.setRaw(CompositeElement.KEY_SUB_ELEMENTS,  
    500                                                 parentElements.add(new ActivationChannel(groupRef))); 
    501  
    502                                 ResourceChanger groupCh = ch.getSub(groupRef); 
    503                                 groupCh.setRaw(ResourceR4.KEY_KIND, ElementGroupR4.KIND); 
    504                                 groupCh.setRaw(ResourceR4.KEY_TITLE, groupTitle); 
    505  
    506                                 groupCh.setRaw(ResourceR4.KEY_TEMPLATE, groupToTemplateRef); 
    507                                 for (Key<?> key : keys) { 
    508                                         groupCh.setRaw(key, null); 
    509                                 } 
    510                         } 
    511  
    512                 }.register(parent.getAccess()); 
    513  
    514434                return groupRef; 
    515435        } 
    516436 
     
    523443                final String frameTitle = templateH.getTitle(); 
    524444 
    525445                final ResourceRefR4 parentRef = parent.getRef(); 
     446                final ResourceRefR4 frameToTemplateRef = ResourceRefR4.getRelativeRef( 
     447                                parentRef.append(frameRef), templateRef);        
    526448                final ImmList<ActivationChannel> elements =  
    527449                        CompositeElement.KEY_SUB_ELEMENTS.get(parent.getAccess()); 
    528450 
    529                 new AutoAction(Message.create(CREATE_FRAME_FOR_TEMPLATE), false) { 
    530                         @Override 
    531                         public void performAuto() { 
    532                                 ResourceChanger ch = getChanger(); 
    533  
    534                                 FrameH.create(ch, frameRef, frameTitle, elements, frameKind, 
    535                                                 MemberElement.DEFAULT_LOCATION, FrameR4.DEFAULT_FRAME_SIZE); 
    536  
    537                                 ResourceRefR4 frameToTemplateRef = ResourceRefR4.getRelativeRef( 
    538                                                 parentRef.append(frameRef), templateRef);                                        
    539                                 TemplateUtil.applyFrameTemplate(ch.getSub(frameRef),  
    540                                                 immKeys.asList(), 
    541                                                 frameToTemplateRef, false, frameKind, false); 
    542                         } 
    543                 }.register(parent.getAccess()); 
     451                new CreateFrameByTemplateAction(Message.create(CREATE_FRAME_FOR_TEMPLATE), false, 
     452                                frameTitle, frameRef, immKeys, frameToTemplateRef, frameKind, elements,  
     453                                null).register(parent.getAccess()); 
    544454        } 
    545455 
    546456        private static void applyFrameTemplate(FrameH templateH, ElementH parent, ResourceRefR4 frameRef) { 
     
    552462 
    553463                final ResourceRefR4 targetToTemplateRef =  
    554464                        ResourceRefR4.getRelativeRef(frameRef, templateH.getRef()); 
    555                 new AutoAction(Message.create(APPLYING_FRAME_TEMPLATE), false) { 
    556  
    557                         @Override 
    558                         public void performAuto() { 
    559                                 TemplateUtil.applyFrameTemplate(getChanger(), templatedKeys.asList(),  
    560                                                 targetToTemplateRef, false, frameTemplateKind, false); 
    561                         } 
    562  
    563                 }.register(frameAccess); 
     465                 
     466                new ApplyFrameTemplateAction(Message.create(APPLYING_FRAME_TEMPLATE), false, templatedKeys, 
     467                                frameTemplateKind, targetToTemplateRef).register(frameAccess); 
    564468        } 
    565469 
    566470} 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/ApplyFrameTemplateHandler.java

     
    99import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
    1010import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    1111import org.sophie2.base.skins.Message; 
     12import org.sophie2.main.app.commons.actions.ApplyFrameTemplateAction; 
    1213import org.sophie2.main.app.commons.element.ElementDropHandler; 
    1314import org.sophie2.main.app.commons.frame.FrameView; 
    14 import org.sophie2.main.app.commons.util.TemplateUtil; 
    1515import org.sophie2.main.dnd.TemplateRefData; 
    1616 
    1717/** 
     
    6060                final String templateKind = templateH.getKind(); 
    6161                final NaiveImmList<TemplatedKey<?>> immKeys = templateH.getApplicableTemplatedKeys(); 
    6262 
    63                 new AutoAction(Message.create(FRAME_TEMPLATE), true) { 
    64  
    65                         @Override 
    66                         public void performAuto() { 
    67                                 TemplateUtil.applyFrameTemplate(getChanger(), immKeys.asList(), 
    68                                                 templateRef, false, templateKind, false); 
    69                         } 
    70  
    71                 }.register(frameAccess); 
     63                new ApplyFrameTemplateAction(Message.create(FRAME_TEMPLATE), true, immKeys, templateKind, 
     64                                templateRef).register(frameAccess); 
    7265        } 
    7366         
    7467        /** 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/FrameTemplateLogic.java

     
    1111import org.sophie2.base.model.book.frame.BoundMode; 
    1212import org.sophie2.base.model.book.frame.FrameR4; 
    1313import org.sophie2.base.model.book.resource.r4.BookR4; 
    14 import org.sophie2.base.model.resources.r4.ResourceRefList; 
    1514import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    1615import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    1716import org.sophie2.base.model.resources.r4.resources.ResourceH; 
     
    3130import org.sophie2.main.app.commons.util.TemplateUtil; 
    3231import org.sophie2.main.dnd.TemplateRefData; 
    3332import org.sophie2.main.func.templates.TemplatePaletteUtil; 
     33import org.sophie2.main.func.templates.actions.DeleteTemplateAction; 
    3434import org.sophie2.main.func.templates.frame.FrameTemplatesPalette.FrameTemplateItem; 
    3535 
    3636/** 
     
    186186 
    187187                        String frameTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    188188                        if (TemplatePaletteUtil.confirmDeletion(frameTitle, bookDocView.swingComponent().get())) { 
    189                                 new AutoAction(Message.create(DELETE_FRAME_TEMPLATE), true) { 
     189                                new DeleteTemplateAction(Message.create(DELETE_FRAME_TEMPLATE), true, 
     190                                                relativeRef, BookR4.KEY_FRAME_TEMPLATES).register(bookDocView.getAccess()); 
    190191 
    191                                         @Override 
    192                                         public void performAuto() { 
    193                                                 ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES); 
    194                                                 templates = templates.remove(relativeRef); 
    195                                                 getChanger().setRaw(BookR4.KEY_FRAME_TEMPLATES, templates); 
    196                                         } 
    197                                 }.register(bookDocView.getAccess()); 
    198  
    199192                                return true; 
    200193                        } 
    201194                        return false; 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateTemplateAction.java

     
     1package org.sophie2.main.app.commons.actions; 
     2 
     3import org.sophie2.base.commons.util.ImmList; 
     4import org.sophie2.base.commons.util.ImmMap; 
     5import org.sophie2.base.commons.util.ImmMap.ImmEntry; 
     6import org.sophie2.base.model.book.interfaces.CompositeElement; 
     7import org.sophie2.base.model.book.resource.r4.BookR4; 
     8import org.sophie2.base.model.book.timelines.ActivationChannel; 
     9import org.sophie2.base.model.resources.r4.ResourceRefList; 
     10import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     11import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     12import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
     13import org.sophie2.base.model.resources.r4.keys.Key; 
     14import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     15import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
     16import org.sophie2.base.skins.Message; 
     17 
     18/** 
     19 * An {@link AutoAction} that applies a creates a new page or frame template. 
     20 *  
     21 * @author astea 
     22 */ 
     23public final class CreateTemplateAction extends AutoAction { 
     24 
     25        private final ResourceRefR4 ref; 
     26        private final boolean createDefaultTemplate; 
     27        private final ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys; 
     28        private final ResourceRefList newTemplates; 
     29        private final ResourceRefR4 relativeRef; 
     30        private final ResourceRefR4 templateRef; 
     31        private final String templateTitle; 
     32        private final Key<ResourceRefList> templatesKey; 
     33        private final Key<ResourceRefR4> defaultTemplateKey; 
     34        private final ImmList<ResourceRefR4> finalRootsToDelete; 
     35 
     36        /** 
     37         * Creates a new <code>CreateTemplateAction</code>. 
     38         *  
     39         * @param description 
     40         *              The description of the new <code>AutoAction</code>. 
     41         * @param significant 
     42         *              The significance of the new <code>AutoAction</code>. 
     43         * @param ref 
     44         *              An absolute reference to the resource from which the template will be created. 
     45         * @param createDefaultTemplate 
     46         *              Whether the new template should be used as a default one. 
     47         * @param resourcesKeys 
     48         *              A map describing which keys should be *excluded* from the template for which elements. 
     49         * @param newTemplates 
     50         *              The new value of the <code>templatesKey<code>. It should contain  
     51         *              <code>relativeRef</code>. 
     52         * @param relativeRef 
     53         *              A relative reference to the resource from which the template will be created. 
     54         * @param templateRef 
     55         *              A reference to the location where the new template should be created. 
     56         * @param templateTitle 
     57         *              The title of the new template. 
     58         * @param templatesKey 
     59         *              The key holding references to all templates of the appropriate kind in the book. 
     60         *              For example, {@link BookR4#KEY_FRAME_TEMPLATES} or {@link BookR4#KEY_PAGE_TEMPLATES}. 
     61         * @param defaultTemplateKey 
     62         *              The key that holds the default template of the appropriate kind. Will be used only if 
     63         *              <code>createDefaultTemplate</code> is true. 
     64         * @param finalRootsToDelete 
     65         *              List of references to resources that should be removed from the template  
     66         *              (sub-elements that should not be included). 
     67         */ 
     68        public CreateTemplateAction(Message description, boolean significant, ResourceRefR4 ref, 
     69                        boolean createDefaultTemplate, 
     70                        ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys, ResourceRefList newTemplates, 
     71                        ResourceRefR4 relativeRef, ResourceRefR4 templateRef, 
     72                        String templateTitle, Key<ResourceRefList> templatesKey, 
     73                        Key<ResourceRefR4> defaultTemplateKey, ImmList<ResourceRefR4> finalRootsToDelete) { 
     74                super(description, significant); 
     75                this.ref = ref; 
     76                this.createDefaultTemplate = createDefaultTemplate; 
     77                this.resourcesKeys = resourcesKeys; 
     78                this.newTemplates = newTemplates; 
     79                this.relativeRef = relativeRef; 
     80                this.templateRef = templateRef; 
     81                this.templateTitle = templateTitle; 
     82                this.templatesKey = templatesKey; 
     83                this.defaultTemplateKey = defaultTemplateKey; 
     84                this.finalRootsToDelete = finalRootsToDelete; 
     85        } 
     86 
     87        @Override 
     88        public void performAuto() { 
     89                getChanger().copyResource(this.relativeRef, this.templateRef); 
     90                getChanger().setRaw(this.templatesKey, this.newTemplates); 
     91 
     92                ResourceChanger subCh = getChanger().getSub(this.templateRef); 
     93 
     94                subCh.setRaw(ResourceR4.KEY_TITLE, this.templateTitle); 
     95 
     96                if (this.resourcesKeys != null) { 
     97                        for (ImmEntry<ResourceRefR4, ImmList<Key<?>>> entry : this.resourcesKeys) { 
     98                                ResourceChanger subChanger =  
     99                                        (entry.getKey().equals(this.ref) ? subCh : subCh.getSub (entry.getKey())); 
     100 
     101                                for (Key<?> key : entry.getValue()) { 
     102                                        subChanger.setRaw(((TemplatedKey<?>) key).getApplyKey(), false); 
     103                                }                
     104                        } 
     105                } 
     106 
     107                if(this.createDefaultTemplate) { 
     108                        getChanger().setRaw(this.defaultTemplateKey, this.templateRef); 
     109                } 
     110 
     111                for (ResourceRefR4 iterRef : this.finalRootsToDelete) { 
     112                        ResourceRefR4 parent = iterRef.getParentRef(), parentToIterRef = ResourceRefR4.getRelativeRef(parent, iterRef); 
     113                        ResourceChanger parentChanger = subCh.getSub(parent); 
     114 
     115                        ImmList<ActivationChannel> channels = parentChanger.getRaw(CompositeElement.KEY_SUB_ELEMENTS); 
     116 
     117                        for (ActivationChannel channel : channels) { 
     118                                ResourceRefR4 elRes = channel.getElementResource(); 
     119 
     120                                if (elRes.equals(parentToIterRef) ) { 
     121                                        channels = channels.remove(channel); 
     122                                        break; 
     123                                } 
     124                        } 
     125                        parentChanger.setRaw(CompositeElement.KEY_SUB_ELEMENTS, channels); 
     126 
     127                        subCh.removeResource(iterRef);   
     128                } 
     129        } 
     130} 
     131 No newline at end of file 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/ApplyTemplateAction.java

     
     1package org.sophie2.main.app.commons.actions; 
     2 
     3import org.sophie2.base.commons.util.ImmList; 
     4import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     5import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     6import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
     7import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     8import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
     9import org.sophie2.base.skins.Message; 
     10 
     11/** 
     12 * An {@link AutoAction} that applies a template. 
     13 *  
     14 * @author deni 
     15 */ 
     16public final class ApplyTemplateAction extends AutoAction { 
     17 
     18        private final ResourceRefR4 templateRef; 
     19        private final ImmList<TemplatedKey<?>> immKeys; 
     20 
     21        /** 
     22         * Creates a new <code>ApplyTemplateAction</code>. 
     23         *  
     24         * @param description 
     25         *              The description of the new <code>AutoAction</code>. 
     26         * @param significant 
     27         *              The significance of the new <code>AutoAction</code>. 
     28         * @param templateRef 
     29         *              A reference to the template that should be applied. 
     30         *              Should be relative from the resource to which it will be applied. 
     31         * @param immKeys 
     32         *              The list of keys whose mode should be set to USE_TEMPLATE. 
     33         */ 
     34        public ApplyTemplateAction(Message description, boolean significant, 
     35                        ResourceRefR4 templateRef, ImmList<TemplatedKey<?>> immKeys) { 
     36                super(description, significant); 
     37                this.templateRef = templateRef; 
     38                this.immKeys = immKeys;          
     39        } 
     40 
     41        /** 
     42         * Gets a reference to the template that should be applied. 
     43         *  
     44         * @return 
     45         *              A reference to the template that should be applied. 
     46         */ 
     47        public ResourceRefR4 getTemplateRef() { 
     48                return this.templateRef; 
     49        } 
     50 
     51        /** 
     52         * Gets a list of keys whose mode should be set to USE_TEMPLATE. 
     53         *  
     54         * @return 
     55         *              The list of keys whose mode should be set to USE_TEMPLATE. 
     56         */ 
     57        public ImmList<TemplatedKey<?>> getImmKeys() { 
     58                return this.immKeys; 
     59        } 
     60 
     61        @Override 
     62        public void performAuto() { 
     63                ResourceChanger ch = getChanger(); 
     64                ch.setRaw(ResourceR4.KEY_TEMPLATE, getTemplateRef()); 
     65 
     66                for (TemplatedKey<?> key : getImmKeys()) { 
     67                        ch.setRaw(key, null); 
     68                        ch.setRaw(key.getLockKey(), false); 
     69                } 
     70        } 
     71} 
     72 No newline at end of file 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateFrameByTemplateAction.java

     
     1package org.sophie2.main.app.commons.actions; 
     2 
     3import org.sophie2.base.commons.util.ImmList; 
     4import org.sophie2.base.commons.util.NaiveImmList; 
     5import org.sophie2.base.commons.util.position.ImmPoint; 
     6import org.sophie2.base.model.book.FrameH; 
     7import org.sophie2.base.model.book.frame.FrameR4; 
     8import org.sophie2.base.model.book.timelines.ActivationChannel; 
     9import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     10import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     11import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
     12import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     13import org.sophie2.base.skins.Message; 
     14import org.sophie2.main.app.commons.util.TemplateUtil; 
     15 
     16/** 
     17 * An {@link AutoAction} that creates a new frame by given frame template. 
     18 *  
     19 * @author deni 
     20 */ 
     21public final class CreateFrameByTemplateAction extends AutoAction { 
     22         
     23        private final String frameTitle; 
     24        private final ResourceRefR4 frameRef; 
     25        private final NaiveImmList<TemplatedKey<?>> immKeys; 
     26        private final ResourceRefR4 frameToTemplateRef; 
     27        private final String kind; 
     28        private final ImmList<ActivationChannel> elements; 
     29        private final ImmPoint pos; 
     30 
     31        /** 
     32         * Creates a new <code>CreateFrameByTemplateAction</code>. 
     33         *  
     34         * @param description 
     35         *              The description of the new <code>AutoAction</code>. 
     36         * @param significant 
     37         *              The significance of the new <code>AutoAction</code>. 
     38         * @param frameTitle 
     39         *              The title of the new frame. 
     40         * @param frameRef 
     41         *              The child reference of the frame that should be created. 
     42         * @param immKeys 
     43         *              The list of keys whose mode should be set to USE_TEMPLATE. 
     44         * @param frameToTemplateRef 
     45         *              A reference to the template from which a new frame should be created. 
     46         *              Should be relative from the new frame. 
     47         * @param kind 
     48         *              The kind of the frame template (respectively, of the new frame).  
     49         * @param elements 
     50         *              The current children of group or page where the new frame will be created. 
     51         * @param pos 
     52         *              The position of the new frame. Please note that if this argument is not null, 
     53         *              it will be used even if the template defines a location value. 
     54         */ 
     55        public CreateFrameByTemplateAction(Message description, 
     56                        boolean significant, String frameTitle, ResourceRefR4 frameRef, 
     57                        NaiveImmList<TemplatedKey<?>> immKeys, 
     58                        ResourceRefR4 frameToTemplateRef, String kind, 
     59                        ImmList<ActivationChannel> elements, ImmPoint pos) { 
     60                super(description, significant); 
     61                this.frameTitle = frameTitle; 
     62                this.frameRef = frameRef; 
     63                this.immKeys = immKeys; 
     64                this.frameToTemplateRef = frameToTemplateRef; 
     65                this.kind = kind; 
     66                this.elements = elements; 
     67                this.pos = pos; 
     68        } 
     69 
     70        @Override 
     71        public void performAuto() { 
     72                ResourceChanger changer = getChanger(); 
     73 
     74                FrameH.create(changer, this.frameRef, this.frameTitle, this.elements, this.kind, 
     75                                this.pos, FrameR4.DEFAULT_FRAME_SIZE); 
     76 
     77                boolean skipLocation = (this.pos != null); 
     78                TemplateUtil.applyFrameTemplate(changer.getSub(this.frameRef),  
     79                                this.immKeys.asList(), this.frameToTemplateRef, skipLocation, this.kind, false); 
     80        } 
     81} 
     82 No newline at end of file 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/ApplyFrameTemplateAction.java

     
     1package org.sophie2.main.app.commons.actions; 
     2 
     3import org.sophie2.base.commons.util.NaiveImmList; 
     4import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     5import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     6import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     7import org.sophie2.base.skins.Message; 
     8import org.sophie2.main.app.commons.util.TemplateUtil; 
     9 
     10/** 
     11 * An {@link AutoAction} that applies a frame template. 
     12 *  
     13 * @author deni 
     14 */ 
     15public final class ApplyFrameTemplateAction extends AutoAction { 
     16         
     17        private final NaiveImmList<TemplatedKey<?>> immKeys; 
     18        private final String templateKind; 
     19        private final ResourceRefR4 templateRef; 
     20 
     21        /** 
     22         * Creates a new <code>ApplyFrameTemplateAction</code>. 
     23         *  
     24         * @param description 
     25         *              The description of the new <code>AutoAction</code>. 
     26         * @param significant 
     27         *              The significance of the new <code>AutoAction</code>. 
     28         * @param immKeys 
     29         *              The list of keys whose mode should be set to USE_TEMPLATE. 
     30         * @param templateKind 
     31         *              The kind of the frame template. 
     32         * @param templateRef 
     33         *              A reference to the frame template that should be applied. 
     34         *              Should be relative from the frame to which it will be applied. 
     35         */ 
     36        public ApplyFrameTemplateAction(Message description, boolean significant,  
     37                        NaiveImmList<TemplatedKey<?>> immKeys, 
     38                        String templateKind, ResourceRefR4 templateRef) { 
     39                super(description, significant); 
     40                this.immKeys = immKeys; 
     41                this.templateKind = templateKind; 
     42                this.templateRef = templateRef; 
     43        } 
     44 
     45        @Override 
     46        public void performAuto() { 
     47                TemplateUtil.applyFrameTemplate(getChanger(), this.immKeys.asList(), 
     48                                this.templateRef, false, this.templateKind, false); 
     49        } 
     50} 
     51 No newline at end of file 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/actions/DeleteTemplateAction.java

     
     1package org.sophie2.main.func.templates.actions; 
     2 
     3import org.sophie2.base.model.book.resource.r4.BookR4; 
     4import org.sophie2.base.model.resources.r4.ResourceRefList; 
     5import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     6import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     7import org.sophie2.base.model.resources.r4.keys.Key; 
     8import org.sophie2.base.skins.Message; 
     9 
     10/** 
     11 * An {@link AutoAction} that deletes a given page or frame template. 
     12 *  
     13 * @author deni 
     14 */ 
     15public final class DeleteTemplateAction extends AutoAction { 
     16 
     17        private final ResourceRefR4 templateRef; 
     18        private Key<ResourceRefList> templateKey; 
     19 
     20        /** 
     21         * Creates a new <code>DeleteFrameTemplateAction</code>. 
     22         *  
     23         * @param description 
     24         *              The description of the new <code>AutoAction</code>. 
     25         * @param significant 
     26         *              The significance of the new <code>AutoAction</code>. 
     27         * @param templateRef 
     28         *              A reference to the template to delete. 
     29         * @param templateKey  
     30         *              The key holding references to all templates of the appropriate kind in the book. 
     31         *              For example, {@link BookR4#KEY_FRAME_TEMPLATES} or {@link BookR4#KEY_PAGE_TEMPLATES}. 
     32         */ 
     33        public DeleteTemplateAction(Message description, boolean significant, 
     34                        ResourceRefR4 templateRef, Key<ResourceRefList> templateKey) { 
     35                super(description, significant); 
     36                this.templateRef = templateRef; 
     37                this.templateKey = templateKey; 
     38        } 
     39 
     40        @Override 
     41        public void performAuto() { 
     42                ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES); 
     43                templates = templates.remove(this.templateRef); 
     44                getChanger().setRaw(this.templateKey, templates); 
     45        } 
     46} 
     47 No newline at end of file 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/page/PageTemplateLogic.java

     
    1212import org.sophie2.base.model.book.BookH; 
    1313import org.sophie2.base.model.book.frame.BoundMode; 
    1414import org.sophie2.base.model.book.resource.r4.BookR4; 
    15 import org.sophie2.base.model.resources.r4.ResourceRefList; 
    1615import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    1716import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    1817import org.sophie2.base.model.resources.r4.resources.ResourceH; 
     
    3736import org.sophie2.main.app.layout.left.pages.PageStructurePalette.PageStructureItem; 
    3837import org.sophie2.main.dnd.TemplateRefData; 
    3938import org.sophie2.main.func.templates.TemplatePaletteUtil; 
     39import org.sophie2.main.func.templates.actions.DeleteTemplateAction; 
    4040import org.sophie2.main.func.templates.frame.ApplyFrameTemplateHandler; 
    4141import org.sophie2.main.func.templates.page.PageTemplatesPalette.PageTemplateItem; 
    4242 
     
    323323                        String pageTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    324324 
    325325                        if (TemplatePaletteUtil.confirmDeletion(pageTitle, bookDocView.swingComponent().get())) { 
    326                                 new AutoAction(Message.create(DELETE_PAGE_TEMPLATE), true) { 
    327  
    328                                         @Override 
    329                                         public void performAuto() { 
    330                                                 ResourceRefList templates = getChanger().getRaw(BookR4.KEY_PAGE_TEMPLATES); 
    331                                                 templates = templates.remove(relativeRef); 
    332                                                 getChanger().setRaw(BookR4.KEY_PAGE_TEMPLATES, templates); 
    333                                         } 
    334                                 }.register(bookDocView.getAccess()); 
     326                                new DeleteTemplateAction(Message.create(DELETE_PAGE_TEMPLATE), true,  
     327                                                relativeRef, BookR4.KEY_PAGE_TEMPLATES).register(bookDocView.getAccess()); 
    335328                                return true; 
    336329                        } 
    337330 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/CreateFrameByTemplateHandler.java

     
    1212import org.sophie2.base.model.resources.r4.ResourceUtil; 
    1313import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
    1414import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    15 import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
    1615import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
    1716import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    1817import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    1918import org.sophie2.base.skins.Message; 
     19import org.sophie2.main.app.commons.actions.CreateFrameByTemplateAction; 
    2020import org.sophie2.main.app.commons.element.ElementDropHandler; 
    2121import org.sophie2.main.app.commons.page.MainPageView; 
    22 import org.sophie2.main.app.commons.util.TemplateUtil; 
    2322import org.sophie2.main.dnd.TemplateRefData; 
    2423 
    2524/** 
     
    8079                        CompositeElement.KEY_SUB_ELEMENTS.get(parentAccess); 
    8180                 
    8281                final ImmPoint pos = getPoint(); 
    83                 new AutoAction(Message.create(CREATE_FRAME_FROM_TEMPLATE), true) { 
    84                         @Override 
    85                         public void performAuto() { 
    86                                 ResourceChanger changer = getChanger(); 
     82                new CreateFrameByTemplateAction(Message.create(CREATE_FRAME_FROM_TEMPLATE), true, frameTitle, frameRef, 
     83                                immKeys, frameToTemplate, kind, elements, pos).register(parentAccess); 
    8784 
    88                                 FrameH.create(changer, frameRef, frameTitle, elements, kind, 
    89                                                 pos, FrameR4.DEFAULT_FRAME_SIZE); 
    90  
    91                                 TemplateUtil.applyFrameTemplate(changer.getSub(frameRef),  
    92                                                 immKeys.asList(), frameToTemplate, true, kind, false); 
    93                         } 
    94                 }.register(parentAccess); 
    95  
    9685                this.getView().getPwa().getSel().getEditScope().selectLastElement();     
    9786        } 
    9887}