/** * Verifies if a merge is allowed from the R-Group's point of view. * Merging between the root structure and r-group substitutes is not allowed, * because it does not makes sense (plus the root structure could get lost). * @param hub controller hub that is about to do a merge. */ public boolean isMergeAllowed(IChemModelRelay hub) { //System.out.println("^^^ isMergeAllowed(IChemModelRelay hub)"); if (rGroupQuery!=null) { for (Iterator<IAtom> it = hub.getRenderer().getRenderer2DModel().getMerge().keySet().iterator(); it.hasNext();) { IAtom mergedAtom = it.next(); IAtom mergedPartnerAtom = hub.getRenderer().getRenderer2DModel().getMerge().get(mergedAtom); IAtomContainer container1 = ChemModelManipulator.getRelevantAtomContainer(hub.getChemModel(), mergedAtom); IAtomContainer container2 = ChemModelManipulator.getRelevantAtomContainer(hub.getChemModel(), mergedPartnerAtom); if(container1!=container2) { List<IAtomContainer> substitutes = rGroupQuery.getSubstituents(); if ((container1==rGroupQuery.getRootStructure() && substitutes.contains(container2)) || (container2==rGroupQuery.getRootStructure() && substitutes.contains(container1))) { JOptionPane.showMessageDialog(jcpPanel.getRenderPanel(), GT.get("This operation is not allowed in the R-Group configuration."), GT.get("R-Group alert"), JOptionPane.INFORMATION_MESSAGE); return false; } } } } return true; }