Ticket #2278: 2278.patch

File 2278.patch, 8.9 KB (added by diana, 15 years ago)
  • src/main/java/org/sophie2/main/func/resources/logic/ResourceDeleteLogic.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.func.resources
     
    1010import org.sophie2.base.model.book.FrameH; 
    1111import org.sophie2.base.model.book.PageH; 
    1212import org.sophie2.base.model.book.interfaces.ResourceFrame; 
     13import org.sophie2.base.model.book.interfaces.StyledElement; 
     14import org.sophie2.base.model.book.resource.AudioResourceH; 
     15import org.sophie2.base.model.book.resource.ImageResourceH; 
    1316import org.sophie2.base.model.book.resource.r4.BookR4; 
    1417import org.sophie2.base.model.resources.r4.ResourceRefList; 
    1518import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     
    3942 * @author diana 
    4043 */ 
    4144public enum ResourceDeleteLogic implements OperationDef { 
    42          
     45 
    4346        /** 
    4447         * Handles the deleting of the existing resources in the book. 
    4548         */ 
     
    5457                public boolean handle(EventR3 event) { 
    5558                        DeleteResourceButton source = event.getSource(DeleteResourceButton.class); 
    5659                        ResourceDetailsPalette palette = source.findParentElement(ResourceDetailsPalette.class); 
    57                          
     60 
    5861                        assert palette != null : "The source must not be null!"; 
    5962 
    6063                        BookDocView bookDocView = palette.findNearestElement(null, BookDocView.class); 
     
    6972                        ConfirmDialogInput input = new ConfirmDialogInput(null, 
    7073                                        "Are you sure you want to delete this resource?", "Warning", false);                     
    7174                        ConfirmDialogInput.Response result = DialogManager.get().showDialog(input); 
    72                          
     75 
    7376                        if (result == ConfirmDialogInput.Response.NO  
    7477                                        || result == ConfirmDialogInput.Response.CLOSED) { 
    7578                                return true; 
    7679                        } 
    77                          
     80 
    7881                        ResourceH resource = ((ResourceItem) selectedItem).resource().get(); 
    7982                        if (!(resource instanceof ElementH)) { 
    8083                                if (!isMainResourceUsed(resource, bookDocView)) { 
    8184                                        return deleteMainResource(resource, bookDocView); 
    8285                                } 
    83                                  
     86 
    8487                                showUserMsg("The selected resource is currently in use."); 
    8588                                return true; 
    8689                        } 
    87                          
     90 
    8891                        return deleteResource(source, (ElementH)resource, bookDocView); 
    8992                } 
    90                  
     93 
    9194                private boolean isMainResourceUsed(ResourceH resource, BookDocView bookDocView) { 
    9295                        List<FrameView> allFrameViews = getAllFrameViews(bookDocView); 
    9396                        ResourceRefR4 resourceRef = resource.getAccess().getRef(); 
    94                          
     97 
    9598                        for (FrameView frameView : allFrameViews) { 
    96                                 String resName =  
     99                                String resMainName =  
    97100                                        ResourceFrame.KEY_MAIN_RESOURCE.get(frameView.getAccess()).getName(); 
    98                                  
    99                                 if (resName.equals(resourceRef.getName())) { 
     101                                String resBackgroundName =  
     102                                        StyledElement.KEY_BACKGROUND__IMAGE.get(frameView.getAccess()).getName(); 
     103                                if (resMainName.equals(resourceRef.getName()) ||  
     104                                                resBackgroundName.equals(resourceRef.getName())) { 
    100105                                        return true; 
    101106                                } 
    102107                        } 
    103                          
     108                        if(resource instanceof AudioResourceH) { 
     109                                String resAudioName =  
     110                                        bookDocView.bookView().get().backgroundAudio().get().getName(); 
     111                                if (resAudioName.equals(resourceRef.getName())) { 
     112                                        return true; 
     113                                } 
     114 
     115                        } 
     116                        if(resource instanceof ImageResourceH) { 
     117                                List<RootPageView> allPageView = getAllPageViews(bookDocView.bookView().get()); 
     118                                for(RootPageView pageView : allPageView) { 
     119                                        String resBackgroundName =  
     120                                                StyledElement.KEY_BACKGROUND__IMAGE.get(pageView.getAccess()).getName(); 
     121                                        if (resBackgroundName.equals(resourceRef.getName())) { 
     122                                                return true; 
     123                                        } 
     124                                } 
     125                        } 
    104126                        return false; 
    105127                } 
    106                  
     128                private List<RootPageView> getAllPageViews(BookView bookView) { 
     129                        List<RootPageView> pageViews = new ArrayList<RootPageView>(); 
     130                        for (ResourceRefR4 pageRef : bookView.model().get().getPages()) { 
     131                                pageViews.add(bookView.getPageView(pageRef)); 
     132                        } 
     133                        return pageViews; 
     134                } 
    107135                private List<FrameView> getAllFrameViews(BookDocView bookDocView) { 
    108136                        List<FrameView> availableViews = new ArrayList<FrameView>(); 
    109137                        BookView bookView = bookDocView.bookView().get(); 
    110                          
     138 
    111139                        for (ResourceRefR4 pageRef : bookView.model().get().getPages()) { 
    112140                                RootPageView rootPageView = bookView.getPageView(pageRef); 
    113141                                List<FrameView> pageFrameView = rootPageView.getAll(FrameView.class); 
    114142                                availableViews.addAll(pageFrameView); 
    115143                        } 
    116                          
     144 
    117145                        return availableViews; 
    118146                } 
    119                  
     147 
    120148                private void showUserMsg(String text) { 
    121149                        DialogUtils.showErrorDialog(null,text, "Cannot delete it."); 
    122150                } 
    123                  
     151 
    124152                private boolean deleteMainResource(ResourceH resource, BookDocView bookDocView) { 
    125153                        ResourceAccess bookAccess = bookDocView.bookView().get().getAccess(); 
    126154                        if (resource.getRef().equals(bookAccess.getRef())) {//the resource is the book 
    127155                                showUserMsg("The resource to delete should not be book resource."); 
    128156                                return true; 
    129157                        } 
    130                          
     158 
    131159                        final ResourceRefR4 resourceRef = resource.getRef().getThisChildRef(); 
    132160                        new AutoAction("Remove Main Resource", true) { 
    133161                                @Override 
     
    136164                                } 
    137165 
    138166                        }.register(bookAccess); 
    139                          
     167 
    140168                        return true; 
    141169                } 
    142                  
     170 
    143171                private boolean deleteResource(DeleteResourceButton source, ElementH resource, BookDocView bookDocView) { 
    144172                        ElementView view = null; 
    145                          
     173 
    146174                        if (resource instanceof PageH) { 
    147175                                //if the resource is a page template 
    148176                                final ResourceRefR4 pageRef = resource.getRef().getThisChildRef(); 
    149177                                ResourceRefList pageTemplates = BookR4.KEY_PAGE_TEMPLATES.get(bookDocView.getAccess()); 
    150178                                int pageTemplateNumber = containing(pageTemplates,pageRef); 
    151                                  
     179 
    152180                                if (pageTemplateNumber != -1) { 
    153181                                        boolean isUsedPageTemplate = isUsedPageTemplate(resource.getRef().getThisChildRef(), bookDocView); 
    154                                          
     182 
    155183                                        if (isUsedPageTemplate) { 
    156184                                                showUserMsg("The page template is currently in use."); 
    157185                                                return true; 
    158186                                        } 
    159                                          
     187 
    160188                                        final ResourceRefList finalPageTemplateList = pageTemplates.remove(pageTemplateNumber); 
    161189                                        new AutoAction("Set New Page Template List", false) { 
    162190                                                @Override 
     
    167195 
    168196                                        }.register(bookDocView.getAccess()); 
    169197                                        return true; 
    170                                          
     198 
    171199                                } 
    172200                                view = bookDocView.bookView().get().getPageView(resource.getRef().getThisChildRef()); 
    173                                  
     201 
    174202                        } else if(resource instanceof FrameH) { 
    175203                                //if frame template 
    176204                                final ResourceRefR4 frameRef = resource.getRef().getThisChildRef(); 
    177205                                ResourceRefList frameTemplates = BookR4.KEY_FRAME_TEMPLATES.get(bookDocView.getAccess()); 
    178206                                int frameTemplateNumber = containing(frameTemplates, frameRef); 
    179                                  
     207 
    180208                                boolean isUsed = isUsedFrameTemplate(frameRef, bookDocView); 
    181209                                if (isUsed) { 
    182210                                        showUserMsg("The frame template is currently in use."); 
    183211                                        return true; 
    184212                                } 
    185                                  
     213 
    186214                                if (frameTemplateNumber != -1 && ! isUsed) { 
    187215                                        final ResourceRefList finalFrameTemplateList =  
    188216                                                frameTemplates.remove(frameTemplateNumber); 
     
    203231                                ResourceRefR4 grRef = resource.getRef().getThisChildRef(); 
    204232                                view = findView(grRef, bookDocView.bookView().get(), GroupView.class); 
    205233                        } 
    206                          
     234 
    207235                        if (view != null) { 
    208236                                LogicR3.fire(source,bookDocView,null,null,BookView.EventIds.ELEMENT_DELETED, view); 
    209237                        } 
    210                          
     238 
    211239                        return true; 
    212240                } 
    213241 
     
    217245                                        return i; 
    218246                                } 
    219247                        } 
    220                          
     248 
    221249                        return -1; 
    222250                } 
    223                  
     251 
    224252                private boolean isUsedPageTemplate(ResourceRefR4 pageTemplate, BookDocView bookDocView) { 
    225253                        BookView bookView = bookDocView.bookView().get(); 
    226                          
     254 
    227255                        for (ResourceRefR4 page : bookView.model().get().getPages()) { 
    228256                                RootPageView pageView = bookView.getPageView(page); 
    229257                                ResourceRefR4 currentTemplate = ResourceRefR4.NONE_REF; 
    230                                  
     258 
    231259                                if (!ResourceR4.KEY_TEMPLATE.get(pageView.getAccess()).equals(currentTemplate)) { 
    232260                                        currentTemplate =  ResourceR4.KEY_TEMPLATE.get(pageView.getAccess()). 
    233261                                        getThisChildRef(); 
    234262                                } 
    235                                  
     263 
    236264                                if (currentTemplate.equals(pageTemplate)) { 
    237265                                        return true; 
    238266                                } 
     
    240268                        } 
    241269                        return false; 
    242270                } 
    243                  
     271 
    244272                private boolean isUsedFrameTemplate(ResourceRefR4 frameTemplate, BookDocView bookDocView) { 
    245273                        BookView bookView = bookDocView.bookView().get(); 
    246274                        for (ResourceRefR4 page : bookView.model().get().getPages()) { 
    247275                                RootPageView pageView = bookView.getPageView(page); 
    248276                                List<FrameView> frames = pageView.getAll(FrameView.class); 
    249                                  
     277 
    250278                                for (FrameView frame : frames) { 
    251279                                        ResourceRefR4 currentTemplate = ResourceRefR4.NONE_REF; 
    252280                                        if (!ResourceR4.KEY_TEMPLATE.get(frame.getAccess()).equals(currentTemplate)) { 
     
    261289                        } 
    262290                        return false; 
    263291                } 
    264                  
     292 
    265293                private ElementView findView(ResourceRefR4 groupRef, BookView bookView, 
    266294                                Class<? extends ElementView> searchedClass) { 
    267295                        for (ResourceRefR4 pageRef : bookView.model().get().getPages()) { 
     
    272300                                        } 
    273301                                } 
    274302                        } 
    275                          
     303 
    276304                        return null; 
    277305                } 
    278306        }