Ticket #2316: bookTemplates.patch

File bookTemplates.patch, 10.4 KB (added by mira, 15 years ago)
  • src/main/java/org/sophie2/main/app/menus/file/FileMenuLogic.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.app.menus
     
    198198                                (StoredResourceAccess) mainWindow.locator().get().create( 
    199199                                ResourceRefR4.make(file), access.getAccessOptions(),  
    200200                                ((BaseResourceAccess) access).getTopRevision()); 
     201                        if (fileAccess == null) { 
     202                                DialogUtils.showErrorDialog(bookDocView.swingComponent().get(), 
     203                                                "The resource "+ file.getName() + " is currently in use.",  
     204                                                "Could not save template"); 
     205                                return false; 
     206                        } 
    201207                        try { 
    202208                                fileAccess.save(null); 
    203209                                bookDocView.reopen(fileAccess); 
  • src/main/java/org/sophie2/main/app/layout/right/library/LibraryTabLogic.java

    #P org.sophie2.main.app.layout
     
    1313import org.sophie2.base.dnd.SophieDragDropHandler.DndImport; 
    1414import org.sophie2.base.layout.impl.DefaultDocView; 
    1515import org.sophie2.base.layout.model.ListPalette; 
     16import org.sophie2.base.model.book.BookH; 
    1617import org.sophie2.base.model.book.FrameH; 
    1718import org.sophie2.base.model.book.PageH; 
    1819import org.sophie2.base.model.book.frame.FrameR4; 
     
    2627import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    2728import org.sophie2.base.model.resources.r4.ResourceUtil; 
    2829import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
     30import org.sophie2.base.model.resources.r4.access.ResourceLocator; 
    2931import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    3032import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
    3133import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     34import org.sophie2.base.model.resources.r4.model.ResourceModel; 
    3235import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    3336import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    3437import org.sophie2.core.logging.SophieLog; 
     
    8487                                SophieLog.debug("This event will not be handled in preview mode!"); 
    8588                                return true; 
    8689                        } 
    87                          
     90 
    8891                        PageWorkArea pwa = bookDocView.workArea().get(); 
    8992                        FrameView currentFrameView = pwa.getSel().getSingleSelected(FrameView.class); 
    9093 
     
    100103                        FrameH template = ((FrameTemplateItem)source.firstSelectedItem().get()).frame().get(); 
    101104 
    102105                        assert template.getRef().isAbsolute(); 
    103                          
     106 
    104107                        final ResourceRefR4 templateRef = ResourceRefR4.getRelativeRef(frameAccess.getRef(), 
    105108                                        template.getRef()); 
    106109                        final String templateKind = frameAccess.open(templateRef, null).getRaw(ResourceR4.KEY_KIND); 
     
    117120                                } 
    118121 
    119122                        }.register(frameAccess); 
    120                          
     123 
    121124                        bookDocView.workArea().get().getSel().getEditScope().selectLastElement(); 
    122                          
     125 
    123126                        return true; 
    124127                } 
    125128 
    126129        }, 
    127          
     130 
    128131        /** 
    129132         * Handles a request by the user to delete the selected frame template. 
    130133         */ 
     
    147150                                SophieLog.debug("This event will not be handled in preview mode!"); 
    148151                                return true; 
    149152                        } 
    150                          
     153 
    151154                        assert source.firstSelectedItem().get() instanceof FrameTemplateItem; 
    152155                        assert source.firstSelectedItem().get() != null; 
    153156                        FrameTemplateItem firstItem = (FrameTemplateItem)source.firstSelectedItem().get(); 
     
    159162                        String frameTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    160163                        if (confirmDeletion(frameTitle, bookDocView.swingComponent().get())) { 
    161164                                new AutoAction("Delete frame template.", true) { 
    162          
     165 
    163166                                        @Override 
    164167                                        public void performAuto() { 
    165168                                                ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES); 
     
    211214 
    212215                public boolean handle(EventR3 event) { 
    213216                        DndImport dndImport = event 
    214                                         .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
    215                                                         DndImport.class); 
     217                        .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
     218                                        DndImport.class); 
    216219                        DndTransferable transferable = dndImport.getTransferable(); 
    217220 
    218221                        PageWorkArea source = event.getSource(PageWorkArea.class); 
     
    222225 
    223226                        if (transferable.getDndData(ResourceRefData.class) != null) { 
    224227                                ResourceRefR4 templateRef = transferable.getDndData(ResourceRefData.class) 
    225                                                 .getResourceRef(); 
     228                                .getResourceRef(); 
    226229                                assert templateRef.isAbsolute(); 
    227230                                if (templateRef.getLocation().startsWith(bookAccess.getRef().getLocation())) { 
    228231                                        ResourceRefR4 bookToTemplate = ResourceRefR4.getRelativeRef( 
     
    232235                                                ResourceAccess templateAccess = bookAccess.open(templateRef, null); 
    233236 
    234237                                                final ResourceRefR4 frameRef = ResourceRefR4 
    235                                                                 .generateRandomSub(FrameH.NAME_PREFIX); 
     238                                                .generateRandomSub(FrameH.NAME_PREFIX); 
    236239                                                final ResourceRefR4 frameToTemplate = ResourceRefR4.getRelativeRef(page 
    237240                                                                .getAccess().getRef().sub(frameRef), templateRef); 
    238241                                                final String frameTitle = ResourceUtil.getNextTitle(bookAccess.getRef(), 
    239242                                                                FrameR4.DEFAULT_TITLE); 
    240243                                                final ImmList<ActivationChannel> elements = CompositeElement.KEY_SUB_ELEMENTS 
    241                                                                 .get(page.getAccess()); 
     244                                                .get(page.getAccess()); 
    242245                                                final String kind = ResourceR4.KEY_KIND.get(templateAccess); 
    243246                                                final ImmPoint pos = event.getEventParam( 
    244247                                                                SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX, 
     
    286289                        BookDocView bookDocView = AppViewUtil.getCurrentBookDocView(source); 
    287290                        assert bookDocView != null : 
    288291                                "There is no current book on which to apply the page template."; 
    289                          
     292 
    290293                        // Disables template logic in preview mode. 
    291294                        if (bookDocView.bookView().get().getViewOptions().isPreviewMode()) { 
    292295                                SophieLog.debug("This event will not be handled in preview mode!"); 
    293296                                return true; 
    294297                        } 
    295                          
     298 
    296299                        if (bookDocView.workArea().get().getRootPageView() != null) { 
    297300                                ResourceAccess pageAccess = bookDocView.workArea().get().getRootPageView().getAccess(); 
    298301                                assert source.firstSelectedItem().get() instanceof PageTemplateItem; 
     
    337340                                SophieLog.debug("This event will not be handled in preview mode!"); 
    338341                                return true; 
    339342                        } 
    340                          
     343 
    341344                        assert source.firstSelectedItem().get() instanceof PageTemplateItem; 
    342345                        assert source.firstSelectedItem().get() != null; 
    343346                        PageTemplateItem firstItem = (PageTemplateItem)source.firstSelectedItem().get(); 
     
    347350                        SophieLog.debug("Delete template " + template.getLocation()); 
    348351 
    349352                        String pageTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    350                          
     353 
    351354                        if (confirmDeletion(pageTitle, bookDocView.swingComponent().get())) { 
    352355                                new AutoAction("Delete page template", true) { 
    353          
     356 
    354357                                        @Override 
    355358                                        public void performAuto() { 
    356359                                                ResourceRefList templates = getChanger().getRaw(BookR4.KEY_PAGE_TEMPLATES); 
     
    418421                public boolean handle(EventR3 event) { 
    419422                        BookTemplatesPalette source = event.getSource(BookTemplatesPalette.class); 
    420423                        AppMainWindow mainWindow = AppViewUtil.findMainWindow(source); 
    421  
     424                        ResourceLocator locator = mainWindow.locator().get(); 
     425                         
    422426                        assert source.firstSelectedItem().get() instanceof BookTemplateItem; 
    423427                        assert source.firstSelectedItem().get() != null; 
    424428                        BookTemplateItem firstItem = (BookTemplateItem)source.firstSelectedItem().get(); 
    425429 
    426                         BookDocView bookView = AppViewUtil.getView(mainWindow, firstItem.bookTemplate().get().book().get(), BookDocView.class); 
    427                         if (mainWindow.documents().get().contains(bookView)) { 
    428                                 LogicR3.fire(bookView, null, null, null, DefaultDocView.EventIds.SELECT); 
    429                         } else { 
    430                                 mainWindow.documents().add(bookView); 
    431                         } 
    432  
     430                        //Always make a new book. Do not give the access used in the book template items. 
     431                        //Otherwise someone can close it. 
     432                        ResourceModel model = firstItem.bookTemplate().get().book().get().getHead().getModel(); 
     433                        ResourceAccess newBook = BookH.createBookAccess(locator, model); 
     434                         
     435                        BookDocView bookView = AppViewUtil.getView(mainWindow, newBook, BookDocView.class); 
     436                        mainWindow.documents().add(bookView); 
     437                         
    433438                        return true; 
    434439                } 
    435440 
     
    457462                        return true; 
    458463                } 
    459464        }, 
    460          
     465 
    461466        /** 
    462467         * Handles the dragging a book template in the work area. Creates a new book 
    463468         * from that template if the drag is on the book desktop. Embeds the 
     
    473478 
    474479                public boolean handle(EventR3 event) { 
    475480                        DndImport dndImport = event 
    476                                         .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
    477                                                         DndImport.class); 
     481                        .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
     482                                        DndImport.class); 
    478483                        DndTransferable transferable = dndImport.getTransferable(); 
    479484 
    480485                        PageWorkArea source = event.getSource(PageWorkArea.class); 
     
    483488 
    484489                        if (transferable.getDndData(ResourceRefData.class) != null) { 
    485490                                final ResourceRefR4 templateRef = transferable.getDndData(ResourceRefData.class) 
    486                                                 .getResourceRef(); 
     491                                .getResourceRef(); 
    487492                                assert templateRef.isAbsolute(); 
    488493                                if (templateRef.getLocation().startsWith( 
    489494                                                bookDocView.model().get().getRef().getLocation())) { 
     
    504509                                                                        templateRef, null); 
    505510 
    506511                                                        final ImmList<ResourceRefR4> templatePages = BookR4.KEY_PAGES 
    507                                                                         .get(templateAccess); 
     512                                                        .get(templateAccess); 
    508513 
    509514                                                        // transforming the list of ResourceRefs to absolute 
    510515                                                        // refs 
     
    524529                                                                        ResourceRefList curPages = ResourceRefList.EMPTY; 
    525530                                                                        for (ResourceRefR4 ref : finalAbsTemplatePages) { 
    526531                                                                                ResourceRefR4 pageRef = ResourceRefR4 
    527                                                                                                 .generateRandomSub(PageH.NAME_PREFIX); 
     532                                                                                .generateRandomSub(PageH.NAME_PREFIX); 
    528533                                                                                String pageTitle = ResourceUtil.getNextTitle(bookRef, 
    529534                                                                                                PageR4.DEFAULT_TITLE); 
    530535                                                                                getChanger().makeResource(pageRef); 
     
    619624                        } 
    620625                } 
    621626        } 
    622          
     627 
    623628        /** 
    624629         * Shows a confirmation dialog if a template should be deleted. 
    625630         *  
     
    635640                                "Confirm removal", false); 
    636641                return DialogManager.get().showDialog(cdi) == ConfirmDialogInput.Response.YES; 
    637642        } 
    638          
     643 
    639644        /** 
    640645         * Ids for events for this tab. 
    641646         *  
     
    648653                @EventParams({DndImport.class, ImmPoint.class}) 
    649654                EMBED_BOOK_TEMPLATE, 
    650655        } 
    651          
    652          
     656 
     657 
    653658        /** 
    654659         * The parameter index of the DND import. 
    655660         */ 
    656661        public static final int DND_IMPORT_PARAM_INDEX = 0; 
    657          
     662 
    658663        /** 
    659664         * The parameter index of the point. 
    660665         */