Ticket #2316: bookTemplates2.patch

File bookTemplates2.patch, 24.0 KB (added by mira, 15 years ago)

The previous patch plus more fixes

  • src/main/java/org/sophie2/main/app/model/book/BookTemplateHelper.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.app.model
     
    33import java.io.File; 
    44import java.util.List; 
    55 
     6import org.sophie2.base.model.resources.r4.access.AccessOptions; 
    67import org.sophie2.base.model.resources.r4.access.ResourceLocator; 
    78import org.sophie2.core.modularity.FileEntryManager; 
    89import org.sophie2.core.prolib.impl.BaseProObject; 
     
    5960         * @param locator 
    6061         *            The {@link ResourceLocator} used to obtains the book 
    6162         *            templates. 
     63         * @param options  
     64         *                        The access options used to load the book templates. 
    6265         */ 
    63         public void loadTemplates(ResourceLocator locator) { 
     66        public void loadTemplates(ResourceLocator locator, AccessOptions options) { 
    6467                for (String filename : getBookTemplateFiles()) { 
    6568                        File file = new File(filename); 
    66                         bookTemplates().add(new BookTemplate(file, locator)); 
     69                        bookTemplates().add(new BookTemplate(file, locator, options)); 
    6770                } 
    6871        } 
    6972 
     
    7679        private List<String> getBookTemplateFiles() { 
    7780                return FileEntryManager.get().listFileEntries(BookTemplateHelper.BOOK_TEMPLATES_DIR); 
    7881        } 
     82 
    7983} 
  • src/main/java/org/sophie2/main/app/model/book/BookTemplate.java

     
    2727         *            The file containing the book. 
    2828         * @param locator 
    2929         *            The {@link ResourceLocator} used to obtain the template. 
     30         * @param options  
     31         *                              The access options used to open access to the template. 
    3032         */ 
    31         public BookTemplate(File file, ResourceLocator locator) { 
     33        public BookTemplate(File file, ResourceLocator locator, AccessOptions options) { 
    3234                assert file != null; 
    3335 
    3436                try { 
    35                         AccessOptions options = locator.getAccessOptions().modifyViewId(); 
    36                         ResourceAccess book = locator.open(ResourceRefR4.make(file), 
    37                                         options); 
     37                        ResourceAccess book = locator.open(ResourceRefR4.make(file), options); 
    3838                        getBean().init(book(), book); 
    3939 
    4040                } catch (RuntimeException e) { 
  • src/main/java/org/sophie2/main/app/commons/book/BookDocView.java

    #P org.sophie2.main.app.commons
     
    2121import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
    2222import org.sophie2.base.model.resources.r4.access.mem.DelegatingMemAccess; 
    2323import org.sophie2.base.model.resources.r4.file.DelegatingFileAccess; 
     24import org.sophie2.base.model.resources.r4.model.ResourceModel; 
    2425import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    2526import org.sophie2.base.skins.SkinElementId; 
    2627import org.sophie2.core.prolib.annot.Own; 
     
    379380                                && !((DelegatingFileAccess) access).getSyncInfo().getLastSave().equals( 
    380381                                                access.getHead().getId())); 
    381382        } 
     383 
     384        /** 
     385         * Helper method used to create a new book from a given starting model  
     386         * and open it for editing. 
     387         *  
     388         * @param model 
     389         *                              The initial model. 
     390         * @param mainWindow 
     391         *                              The main window of the application. 
     392         */ 
     393        public static void makeNewBook(ResourceModel model, AppMainWindow mainWindow) { 
     394                ResourceAccess newBook = BookH.createBookAccess(mainWindow.locator().get(), model); 
     395                 
     396                BookDocView bookView = AppViewUtil.getView(mainWindow, newBook, BookDocView.class); 
     397                mainWindow.documents().add(bookView); 
     398                mainWindow.currentDocument().set(bookView); 
     399        } 
    382400} 
  • pom.xml

    #P org.sophie2.main.app.menus
     
    9494                        <artifactId>org.sophie2.core.mvc</artifactId> 
    9595                        <version>2.0.2</version> 
    9696                </dependency> 
     97                <!-- TODO: Added because of "Save book as template". Remove some day--> 
     98                <dependency> 
     99                        <groupId>org.sophie2</groupId> 
     100                        <artifactId>org.sophie2.main.app.layout</artifactId> 
     101                        <version>2.0.2</version> 
     102                </dependency> 
    97103                <dependency> 
    98104                        <groupId>org.sophie2</groupId> 
    99105                        <artifactId>org.sophie2.main.func.file</artifactId> 
  • src/main/java/org/sophie2/main/app/menus/file/FileMenuLogic.java

     
    22 
    33import java.io.File; 
    44import java.io.IOException; 
     5import java.util.List; 
    56 
    67import org.sophie2.base.commons.util.position.ImmSize; 
    78import org.sophie2.base.dialogs.DialogManager; 
     
    1213import org.sophie2.base.model.book.BookH; 
    1314import org.sophie2.base.model.book.resource.r4.BookR4; 
    1415import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     16import org.sophie2.base.model.resources.r4.access.AccessOptions; 
    1517import org.sophie2.base.model.resources.r4.access.BaseResourceAccess; 
    1618import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
     19import org.sophie2.base.model.resources.r4.access.ResourceLocator; 
    1720import org.sophie2.base.model.resources.r4.access.StoredResourceAccess; 
    1821import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    1922import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
     23import org.sophie2.base.model.resources.r4.model.ResourceRevision; 
    2024import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    2125import org.sophie2.core.logging.SophieLog; 
    2226import org.sophie2.core.modularity.FileEntryManager; 
     
    3236import org.sophie2.main.app.commons.dialogs.BookPropertiesDialog; 
    3337import org.sophie2.main.app.commons.util.AppViewUtil; 
    3438import org.sophie2.main.app.commons.util.SaveDocUtil; 
     39import org.sophie2.main.app.layout.right.library.BookTemplatesPalette; 
    3540import org.sophie2.main.app.model.book.BookTemplate; 
    3641import org.sophie2.main.app.model.book.BookTemplateHelper; 
    3742import org.sophie2.main.dialogs.input.DialogUtils; 
     
    186191                public boolean handle(EventR3 event) { 
    187192                        SaveBookAsTemplateItem source = event.getSource(SaveBookAsTemplateItem.class);   
    188193                        BookDocView bookDocView = AppViewUtil.getCurrentBookDocView(source); 
    189  
     194                        AppMainWindow mainWindow = AppViewUtil.findMainWindow(bookDocView); 
     195                        ResourceLocator locator =  mainWindow.locator().get(); 
     196                         
    190197                        String bookTitle = bookDocView.bookView().get().model().get().getTitle(); 
    191198                        String fileName = FileDialogInput.appendFileExtension( 
    192199                                        new File(bookTitle), FileDialogInput.BOOK_FILTER).getName(); 
    193200                        fileName = BookTemplateHelper.BOOK_TEMPLATES_DIR + "/" + fileName; 
    194201                        File file = FileEntryManager.get().getWritableFileEntry(fileName); 
     202                        ResourceRefR4 templateRef = ResourceRefR4.make(file); 
     203                         
    195204                        ResourceAccess access = bookDocView.getAccess(); 
    196                         AppMainWindow mainWindow = AppViewUtil.findMainWindow(bookDocView); 
    197                         StoredResourceAccess fileAccess =  
    198                                 (StoredResourceAccess) mainWindow.locator().get().create( 
    199                                 ResourceRefR4.make(file), access.getAccessOptions(),  
    200                                 ((BaseResourceAccess) access).getTopRevision()); 
     205 
     206                         
     207                        ResourceRevision revision = ((BaseResourceAccess) access).getTopRevision(); 
     208                        AccessOptions options = BookTemplatesPalette.PALETTE_ACCESS_OPTIONS; 
     209                        List<BookTemplate> bookTemplates = BookTemplateHelper.get().bookTemplates().get(); 
     210                        for (int i = 0; i < bookTemplates.size(); i++) { 
     211                                ResourceAccess templateAccess = bookTemplates.get(i).book().get(); 
     212                                if (templateRef.equals(templateAccess.getRef())) { 
     213                                        BookTemplateHelper.get().bookTemplates().remove(i); 
     214                                        templateAccess.close(); 
     215                                        break; 
     216                                } 
     217                        } 
     218                        StoredResourceAccess fileAccess = (StoredResourceAccess) locator.create( 
     219                                                                                templateRef, options , revision); 
     220                        if (fileAccess == null) { 
     221                                DialogUtils.showErrorDialog(bookDocView.swingComponent().get(), 
     222                                                "This template is curently in use.", "Couldn't Save Book Template"); 
     223                                return false; 
     224                        } 
    201225                        try { 
    202226                                fileAccess.save(null); 
    203                                 bookDocView.reopen(fileAccess); 
    204227                                access.close(); 
     228                                mainWindow.documents().get().remove(bookDocView); 
     229                                mainWindow.currentDocument().set(null); 
    205230                                BookTemplateHelper.get().bookTemplates().add(new BookTemplate(fileAccess)); 
    206231                        } catch (IOException e) { 
    207232                                DialogUtils.showExceptionDialog(bookDocView.swingComponent().get(), 
  • src/main/java/org/sophie2/main/app/layout/right/library/BookTemplatesPalette.java

    #P org.sophie2.main.app.layout
     
    77import org.sophie2.base.dnd.SophieDragDropHandler; 
    88import org.sophie2.base.layout.model.ListPalette; 
    99import org.sophie2.base.layout.model.ListPaletteItem; 
     10import org.sophie2.base.model.resources.r4.access.AccessOptions; 
    1011import org.sophie2.base.model.resources.r4.access.ResourceLocator; 
    1112import org.sophie2.base.skins.SkinElementId; 
    1213import org.sophie2.core.mvc.EventParams; 
     
    2930ListPalette<BookTemplatesPalette.BookTemplateItem> { 
    3031 
    3132        /** 
     33         * AccessOptions used by this palette to load and keep its resources. 
     34         */ 
     35        public static final AccessOptions PALETTE_ACCESS_OPTIONS =  
     36                                AccessOptions.DEFAULT_ACCESS_OPTIONS.modifyViewId(); 
     37        /** 
    3238         * A display item for a template. 
    3339         *  
    3440         * @author milo 
     
    8389                                                AppViewUtil.findMainWindow(BookTemplatesPalette.this); 
    8490                                        if (mainWindow != null) { 
    8591                                                ResourceLocator locator = mainWindow.locator().get(); 
    86                                                 BookTemplateHelper.get().loadTemplates(locator); 
     92                                                BookTemplateHelper.get().loadTemplates(locator, PALETTE_ACCESS_OPTIONS); 
    8793                                        } 
    8894                                } 
    8995 
  • src/main/java/org/sophie2/main/app/layout/right/library/LibraryTabLogic.java

     
    1111import org.sophie2.base.dnd.SophieTransferable; 
    1212import org.sophie2.base.dnd.SophieDragDropHandler.DndExport; 
    1313import org.sophie2.base.dnd.SophieDragDropHandler.DndImport; 
    14 import org.sophie2.base.layout.impl.DefaultDocView; 
    1514import org.sophie2.base.layout.model.ListPalette; 
    1615import org.sophie2.base.model.book.FrameH; 
    1716import org.sophie2.base.model.book.PageH; 
     
    2019import org.sophie2.base.model.book.interfaces.MemberElement; 
    2120import org.sophie2.base.model.book.interfaces.ResourceFrame; 
    2221import org.sophie2.base.model.book.resource.r4.BookR4; 
    23 import org.sophie2.base.model.book.resource.r4.PageR4; 
    2422import org.sophie2.base.model.book.timelines.ActivationChannel; 
    2523import org.sophie2.base.model.resources.r4.ResourceRefList; 
    2624import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     
    2927import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    3028import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
    3129import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 
     30import org.sophie2.base.model.resources.r4.model.ResourceModel; 
    3231import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    3332import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    3433import org.sophie2.core.logging.SophieLog; 
     
    4039import org.sophie2.core.mvc.events.EventR3; 
    4140import org.sophie2.main.app.commons.app.AppMainWindow; 
    4241import org.sophie2.main.app.commons.book.BookDocView; 
    43 import org.sophie2.main.app.commons.dialogs.BookInfo; 
    4442import org.sophie2.main.app.commons.frame.FrameView; 
    4543import org.sophie2.main.app.commons.page.PageWorkArea; 
    4644import org.sophie2.main.app.commons.page.RootPageView; 
     
    8482                                SophieLog.debug("This event will not be handled in preview mode!"); 
    8583                                return true; 
    8684                        } 
    87                          
     85 
    8886                        PageWorkArea pwa = bookDocView.workArea().get(); 
    8987                        FrameView currentFrameView = pwa.getSel().getSingleSelected(FrameView.class); 
    9088 
     
    10098                        FrameH template = ((FrameTemplateItem)source.firstSelectedItem().get()).frame().get(); 
    10199 
    102100                        assert template.getRef().isAbsolute(); 
    103                          
     101 
    104102                        final ResourceRefR4 templateRef = ResourceRefR4.getRelativeRef(frameAccess.getRef(), 
    105103                                        template.getRef()); 
    106104                        final String templateKind = frameAccess.open(templateRef, null).getRaw(ResourceR4.KEY_KIND); 
     
    117115                                } 
    118116 
    119117                        }.register(frameAccess); 
    120                          
     118 
    121119                        bookDocView.workArea().get().getSel().getEditScope().selectLastElement(); 
    122                          
     120 
    123121                        return true; 
    124122                } 
    125123 
    126124        }, 
    127          
     125 
    128126        /** 
    129127         * Handles a request by the user to delete the selected frame template. 
    130128         */ 
     
    147145                                SophieLog.debug("This event will not be handled in preview mode!"); 
    148146                                return true; 
    149147                        } 
    150                          
     148 
    151149                        assert source.firstSelectedItem().get() instanceof FrameTemplateItem; 
    152150                        assert source.firstSelectedItem().get() != null; 
    153151                        FrameTemplateItem firstItem = (FrameTemplateItem)source.firstSelectedItem().get(); 
     
    159157                        String frameTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    160158                        if (confirmDeletion(frameTitle, bookDocView.swingComponent().get())) { 
    161159                                new AutoAction("Delete frame template.", true) { 
    162          
     160 
    163161                                        @Override 
    164162                                        public void performAuto() { 
    165163                                                ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES); 
     
    174172                } 
    175173 
    176174        }, 
     175 
    177176        /** 
    178177         * Handles the dragging a frame template out of the 
    179178         * {@link FrameTemplatesPalette}. 
     
    210209                } 
    211210 
    212211                public boolean handle(EventR3 event) { 
    213                         DndImport dndImport = event 
    214                                         .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
    215                                                         DndImport.class); 
     212                        int transIndex = SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX; 
     213                        DndImport dndImport = event.getEventParam(transIndex, DndImport.class); 
    216214                        DndTransferable transferable = dndImport.getTransferable(); 
    217215 
    218216                        PageWorkArea source = event.getSource(PageWorkArea.class); 
     
    220218                        ResourceAccess bookAccess = bookDocView.getAccess(); 
    221219                        PageH page = source.getRootPageView().model().get(); 
    222220 
    223                         if (transferable.getDndData(ResourceRefData.class) != null) { 
    224                                 ResourceRefR4 templateRef = transferable.getDndData(ResourceRefData.class) 
    225                                                 .getResourceRef(); 
     221                        ResourceRefData refData = transferable.getDndData(ResourceRefData.class); 
     222                        if (refData != null) { 
     223                                ResourceRefR4 templateRef = refData.getResourceRef(); 
    226224                                assert templateRef.isAbsolute(); 
    227225                                if (templateRef.getLocation().startsWith(bookAccess.getRef().getLocation())) { 
    228226                                        ResourceRefR4 bookToTemplate = ResourceRefR4.getRelativeRef( 
     
    231229                                        if (BookR4.KEY_FRAME_TEMPLATES.get(bookAccess).contains(bookToTemplate)) { 
    232230                                                ResourceAccess templateAccess = bookAccess.open(templateRef, null); 
    233231 
    234                                                 final ResourceRefR4 frameRef = ResourceRefR4 
    235                                                                 .generateRandomSub(FrameH.NAME_PREFIX); 
     232                                                final ResourceRefR4 frameRef = ResourceRefR4.generateRandomSub(FrameH.NAME_PREFIX); 
    236233                                                final ResourceRefR4 frameToTemplate = ResourceRefR4.getRelativeRef(page 
    237234                                                                .getAccess().getRef().sub(frameRef), templateRef); 
    238235                                                final String frameTitle = ResourceUtil.getNextTitle(bookAccess.getRef(), 
    239236                                                                FrameR4.DEFAULT_TITLE); 
    240237                                                final ImmList<ActivationChannel> elements = CompositeElement.KEY_SUB_ELEMENTS 
    241                                                                 .get(page.getAccess()); 
     238                                                .get(page.getAccess()); 
    242239                                                final String kind = ResourceR4.KEY_KIND.get(templateAccess); 
    243240                                                final ImmPoint pos = event.getEventParam( 
    244241                                                                SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX, 
     
    286283                        BookDocView bookDocView = AppViewUtil.getCurrentBookDocView(source); 
    287284                        assert bookDocView != null : 
    288285                                "There is no current book on which to apply the page template."; 
    289                          
     286 
    290287                        // Disables template logic in preview mode. 
    291288                        if (bookDocView.bookView().get().getViewOptions().isPreviewMode()) { 
    292289                                SophieLog.debug("This event will not be handled in preview mode!"); 
    293290                                return true; 
    294291                        } 
    295                          
     292 
    296293                        if (bookDocView.workArea().get().getRootPageView() != null) { 
    297294                                ResourceAccess pageAccess = bookDocView.workArea().get().getRootPageView().getAccess(); 
    298295                                assert source.firstSelectedItem().get() instanceof PageTemplateItem; 
     
    315312                        return true;                     
    316313                } 
    317314        }, 
     315 
    318316        /** 
    319317         * Handles a request by the user to delete the selected page template. 
    320318         */ 
     
    337335                                SophieLog.debug("This event will not be handled in preview mode!"); 
    338336                                return true; 
    339337                        } 
    340                          
     338 
    341339                        assert source.firstSelectedItem().get() instanceof PageTemplateItem; 
    342340                        assert source.firstSelectedItem().get() != null; 
    343341                        PageTemplateItem firstItem = (PageTemplateItem)source.firstSelectedItem().get(); 
     
    347345                        SophieLog.debug("Delete template " + template.getLocation()); 
    348346 
    349347                        String pageTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 
    350                          
     348 
    351349                        if (confirmDeletion(pageTitle, bookDocView.swingComponent().get())) { 
    352350                                new AutoAction("Delete page template", true) { 
    353          
     351 
    354352                                        @Override 
    355353                                        public void performAuto() { 
    356354                                                ResourceRefList templates = getChanger().getRaw(BookR4.KEY_PAGE_TEMPLATES); 
     
    404402                        return false; 
    405403                } 
    406404        }, 
     405 
    407406        /** 
    408407         * Handles a user request to open a given book template for editing. 
    409408         */ 
     
    421420 
    422421                        assert source.firstSelectedItem().get() instanceof BookTemplateItem; 
    423422                        assert source.firstSelectedItem().get() != null; 
    424                         BookTemplateItem firstItem = (BookTemplateItem)source.firstSelectedItem().get(); 
     423                        BookTemplateItem firstItem = (BookTemplateItem) source.firstSelectedItem().get(); 
    425424 
    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                         } 
     425                        //Always make a new book. Do not give the access used in the book template items. 
     426                        //Otherwise someone can close it. 
     427                        ResourceModel model = firstItem.bookTemplate().get().book().get().getHead().getModel(); 
     428                        BookDocView.makeNewBook(model, mainWindow); 
    432429 
    433430                        return true; 
    434431                } 
     
    457454                        return true; 
    458455                } 
    459456        }, 
    460          
     457 
    461458        /** 
    462459         * Handles the dragging a book template in the work area. Creates a new book 
    463460         * from that template if the drag is on the book desktop. Embeds the 
     
    472469                } 
    473470 
    474471                public boolean handle(EventR3 event) { 
    475                         DndImport dndImport = event 
    476                                         .getEventParam(SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
    477                                                         DndImport.class); 
     472                        int paramIndex = SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX; 
     473                        DndImport dndImport = event.getEventParam(paramIndex, DndImport.class); 
    478474                        DndTransferable transferable = dndImport.getTransferable(); 
    479475 
    480476                        PageWorkArea source = event.getSource(PageWorkArea.class); 
    481477                        AppMainWindow mainWindow = AppViewUtil.findMainWindow(source); 
    482478                        BookDocView bookDocView = source.findParentElement(BookDocView.class); 
    483479 
    484                         if (transferable.getDndData(ResourceRefData.class) != null) { 
    485                                 final ResourceRefR4 templateRef = transferable.getDndData(ResourceRefData.class) 
    486                                                 .getResourceRef(); 
    487                                 assert templateRef.isAbsolute(); 
    488                                 if (templateRef.getLocation().startsWith( 
    489                                                 bookDocView.model().get().getRef().getLocation())) { 
    490                                         String kind = ResourceR4.KEY_KIND.get(mainWindow.locator().get().open( 
    491                                                         templateRef, null)); 
     480                        ResourceRefData data = transferable.getDndData(ResourceRefData.class); 
     481                        if (data != null) { 
     482                                final ResourceRefR4 templateRef = data.getResourceRef(); 
     483                                assert templateRef.isAbsolute() : "The transferable ref should be absolute."; 
    492484 
    493                                         if (kind.equals(BookR4.KIND)) { 
    494                                                 // check if this is the book desktop or not 
    495                                                 if (mainWindow.desktopDocument().get() == bookDocView) { 
    496                                                         // create a new book from the template 
    497  
    498                                                         BookDocView bookView = BookDocView.create(mainWindow, 
    499                                                                         BookInfo.getDefaultInfo()); 
    500  
    501                                                         DefaultDocView.setCurrent(bookView); 
    502  
    503                                                         final ResourceAccess templateAccess = bookView.getAccess().open( 
    504                                                                         templateRef, null); 
    505  
    506                                                         final ImmList<ResourceRefR4> templatePages = BookR4.KEY_PAGES 
    507                                                                         .get(templateAccess); 
    508  
    509                                                         // transforming the list of ResourceRefs to absolute 
    510                                                         // refs 
    511                                                         ResourceRefList absTemplatePages = ResourceRefList.EMPTY; 
    512                                                         for (ResourceRefR4 r : templatePages) { 
    513                                                                 ResourceRefR4 abs = templateAccess.open(r, null).getRef(); 
    514                                                                 absTemplatePages = absTemplatePages.add(abs); 
    515                                                         } 
    516                                                         final ResourceRefList finalAbsTemplatePages = absTemplatePages; 
    517                                                         final ResourceRefR4 bookRef = bookView.getAccess().getRef(); 
    518  
    519                                                         new AutoAction("Create new book from a template.", true) { 
    520                                                                 @Override 
    521                                                                 public void performAuto() { 
    522                                                                         getChanger().setRaw(ResourceR4.KEY_TEMPLATE, templateRef); 
    523                                                                         getChanger().setRaw(BookR4.KEY_PAGE_SIZE, null); 
    524                                                                         ResourceRefList curPages = ResourceRefList.EMPTY; 
    525                                                                         for (ResourceRefR4 ref : finalAbsTemplatePages) { 
    526                                                                                 ResourceRefR4 pageRef = ResourceRefR4 
    527                                                                                                 .generateRandomSub(PageH.NAME_PREFIX); 
    528                                                                                 String pageTitle = ResourceUtil.getNextTitle(bookRef, 
    529                                                                                                 PageR4.DEFAULT_TITLE); 
    530                                                                                 getChanger().makeResource(pageRef); 
    531                                                                                 getChanger().getSub(pageRef).setRaw(ResourceR4.KEY_KIND, 
    532                                                                                                 PageR4.KIND); 
    533                                                                                 getChanger().getSub(pageRef).setRaw( 
    534                                                                                                 ResourceR4.KEY_TEMPLATE, ref); 
    535                                                                                 getChanger().getSub(pageRef).setRaw(ResourceR4.KEY_TITLE, 
    536                                                                                                 pageTitle); 
    537                                                                                 curPages = curPages.add(pageRef); 
    538  
    539                                                                                 // TODO remove this when templating of 
    540                                                                                 // sub elements if fixed... 
    541                                                                                 getChanger().getSub(pageRef).setRaw( 
    542                                                                                                 CompositeElement.KEY_SUB_ELEMENTS, 
    543                                                                                                 CompositeElement.KEY_SUB_ELEMENTS.getDefault()); 
    544  
    545                                                                         } 
    546                                                                         getChanger().setRaw(BookR4.KEY_PAGES, curPages); 
    547                                                                 } 
    548  
    549                                                         }.register(bookView.getAccess()); 
    550                                                 } else { 
    551                                                         // embed the template in the current book 
    552                                                         final ImmPoint pos = event.getEventParam( 
    553                                                                         SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX, 
    554                                                                         ImmPoint.class); 
    555  
    556                                                         LogicR3.fire(source, null, null, null, EventIds.EMBED_BOOK_TEMPLATE, 
    557                                                                         dndImport, pos); 
    558                                                 } 
    559                                                 return true; 
     485                                ResourceAccess templateAccess = mainWindow.locator().get().open( 
     486                                                templateRef, null); 
     487                                String kind = ResourceR4.KEY_KIND.get(templateAccess); 
     488                                if (kind.equals(BookR4.KIND)) { 
     489                                        // check if this is the book desktop or not 
     490                                        if (mainWindow.desktopDocument().get() == bookDocView) { 
     491                                                // create a new book from the template 
     492                                                ResourceModel model = templateAccess.getHead().getModel();  
     493                                                BookDocView.makeNewBook(model, mainWindow); 
     494                                        } else { 
     495                                                // embed the template in the current book 
     496                                                int pointParamIndex = SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX; 
     497                                                ImmPoint pos = event.getEventParam(pointParamIndex, ImmPoint.class); 
     498                                                LogicR3.fire(source, null, null, null, EventIds.EMBED_BOOK_TEMPLATE, 
     499                                                                dndImport, pos); 
    560500                                        } 
     501                                        //close the tmp access. 
     502                                        templateAccess.close(); 
     503                                        return true; 
    561504                                } 
    562505                        } 
    563506                        return false; 
     
    619562                        } 
    620563                } 
    621564        } 
    622          
     565 
    623566        /** 
    624567         * Shows a confirmation dialog if a template should be deleted. 
    625568         *  
     
    635578                                "Confirm removal", false); 
    636579                return DialogManager.get().showDialog(cdi) == ConfirmDialogInput.Response.YES; 
    637580        } 
    638          
     581 
    639582        /** 
    640583         * Ids for events for this tab. 
    641584         *  
     
    648591                @EventParams({DndImport.class, ImmPoint.class}) 
    649592                EMBED_BOOK_TEMPLATE, 
    650593        } 
    651          
    652          
     594 
     595 
    653596        /** 
    654597         * The parameter index of the DND import. 
    655598         */ 
    656599        public static final int DND_IMPORT_PARAM_INDEX = 0; 
    657          
     600 
    658601        /** 
    659602         * The parameter index of the point. 
    660603         */