boolean openRing(int rnum) { if (prev == null) { error = "Cannot open ring, no previous atom"; return false; } if (bond == null) { bond = new QueryBond(null); bond.setExpression(null); } bond.setAtom(prev, 0); rings[rnum] = addBond(prev, bond); numRingOpens++; bond = null; return true; }
boolean parseBondExpr() { bond = new QueryBond(mol.getBuilder()); bond.setExpression(new Expr(Expr.Type.NONE)); if (!parseBondExpr(bond.getExpression(), bond, '\0')) { error = "Invalid bond expression"; return false; } return true; }
boolean closeRing(int rnum) { IBond bond = rings[rnum]; rings[rnum] = null; numRingOpens--; Expr openExpr = ((QueryBond) BondRef.deref(bond)).getExpression(); if (this.bond != null) { Expr closeExpr = ((QueryBond) BondRef.deref(this.bond)).getExpression(); if (openExpr == null) ((QueryBond) BondRef.deref(bond)).setExpression(closeExpr); else if (!openExpr.equals(closeExpr)) { error = "Open/close expressions are not equivalent"; return false; } this.bond = null; } else if (openExpr == null) { ((QueryBond) BondRef.deref(bond)).setExpression(new Expr(SINGLE_OR_AROMATIC)); } bond.setAtom(prev, 1); addBond(prev, bond); return true; }
void append(IAtom atom) { if (curComponentId != 0) atom.setProperty(CDKConstants.REACTION_GROUP, curComponentId); mol.addAtom(atom); if (prev != null) { if (bond == null) { bond = new QueryBond(mol.getBuilder()); bond.setExpression(new Expr(SINGLE_OR_AROMATIC)); } bond.setAtom(prev, 0); bond.setAtom(atom, 1); addBond(prev, bond); addBond(atom, bond); } else local.put(atom, new LocalNbrs(true)); prev = atom; bond = null; }
else expr.and(new Expr(SINGLE_OR_AROMATIC)); ((QueryBond) bond).setExpression(expr);