From: Egon W. <eg...@us...> - 2002-06-08 20:29:07
|
Update of /cvsroot/woc/woc/source/wocjava/source/com/egonw/woc In directory usw-pr-cvs1:/tmp/cvs-serv19480 Added Files: Bruto.java FWord.java Formule.java Item.java Picture.java Raw.java Smile.java StoichFormule.java WocEngine.java WoordTable.java XItem.java XTYPE.java Log Message: Added java source files. --- NEW FILE: Bruto.java --- package com.egonw.woc; import java.lang.Character; public class Bruto extends Formule { public Bruto(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); boolean PrevCharIsDigit = false; //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = false; }; if (c.isDigit(c.charValue())) { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = true; }; if (c.charValue() == ')' || c.charValue() == '(') { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); if (PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; } }; if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; return resultaat.toString(); } } --- NEW FILE: FWord.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.egonw.woc.util.*; public class FWord { private String lang; private String fword; private String dword; private String anchor; public FWord(String lang) { this.lang = lang; this.fword = new String(); this.dword = new String(); this.anchor = new String(); } public void setFWord(String s) { this.fword = s; } public void setDWord(String s) { this.dword = s; } public void setAnchor(String s) { this.anchor = s; } public String getFWord() { return this.fword; } public String getDWord() { return this.dword; } public String getAnchor() { return this.anchor; } public boolean equals(String s) { return fword.equals(s); } public int hashCode() { return (this.fword).hashCode(); } public String toString() { return this.fword; } } --- NEW FILE: Formule.java --- package com.egonw.woc; public class Formule { private String value; protected Formule() { value = new String(); } protected Formule(String s) { value = new String(s); } public final boolean isEmpty() { return (value.length() == 0); } public final String value() { return value; } } --- NEW FILE: Item.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.egonw.woc.util.*; /** * Class that defines a item and specifies the field information * for the Woc-file format. * * @author Egon Willighagen * @version 2.0, 1/7/98 */ public class Item { private Object data[]; private boolean isEmpty; public final static int ITEM = 0; public final static int ANCHOR = 1; public final static int NAME = 2; public final static int GROUP = 3; public final static int TRIVIALNAME = 4; public final static int EIGENNAME = 5; public final static int SUBITEM = 6; public final static int PICTUREFILE = 7; public final static int XYZFILE = 8; public final static int ENGLISH = 9; public final static int COMMENT = 10; public final static int FORMULA = 11; public final static int MASS = 12; public final static int BOILINGPOINT = 13; public final static int MELTINGPOINT = 14; public final static int ZIE = 15; public final static int VERGELIJK = 16; public final static int IUPACNAME = 17; public final static int MSDS = 18; public final static int SMILE = 19; public final static int LEVEN = 20; public final static int BRUTO = 21; public final static int DIPOOL = 22; public final static int CASNR = 23; public final static int RHO = 24; public final static int PDB = 25; public final static int REACTIE = 26; public final static int URL = 27; public final static int BRON = 28; public final static int MOL = 29; public final static int LIDWOORD = 30; public final static int VERVOEGINGEN = 31; public final static int FUNCTIE = 32; public final static int CHEMICAL = 33; public final static int VOORBEELD = 34; public final static int AFKORT = 35; public final static int PICTUREDIR = 36; public final static int NUMBER = 37; public final static int NUMBER_OF_TYPES = 38; public Item() { data = new Object[NUMBER_OF_TYPES]; for (int i=0; i<NUMBER_OF_TYPES; i++) { data[i] = null; } isEmpty = true; } public boolean isEmpty() { boolean rv = true; for (int i=0; i<NUMBER_OF_TYPES; i++) { if (data[i] != null) { rv = false; } } return rv; } public void add(int code, Object o) { isEmpty = false; if (code == ANCHOR) { } else if (code >= NUMBER_OF_TYPES) { } else { data[code] = o; } } public void remove(int code) { data[code] = null; } public Object get(int code) { if (code == ANCHOR) { return (Object)Convert.NAMELikeToANCHORLike((String)get(Item.NAME)); } else if (code >= NUMBER_OF_TYPES) { return null; } else { return data[code]; } } public boolean contains(int code) { if (code == ANCHOR) { return true; } else if (code >= NUMBER_OF_TYPES) { return false; } else { return (data[code] != null); } } public boolean equals(Item i) { return (((String)get(ANCHOR)).equals(i.get(ANCHOR))); } public int hashCode() { if (contains(NAME)) { return (int)get(NAME).hashCode(); } else { return 0; } } public String toString() { return Convert.NAMELikeToANCHORLike((String)get(NAME)); } public boolean result(UnaryPredicate up) { return up.execute(this); } } --- NEW FILE: Picture.java --- package com.egonw.woc; import com.egonw.woc.util.*; public class Picture { private String onderschrift; private String path; public Picture() { path = new String(); onderschrift = new String(); } public Picture(String dir) { path = dir; onderschrift = ""; } public Picture(String dir, String subtitle) { path = dir; onderschrift = subtitle; } public String path() { return path; } public String subtitle() { return onderschrift; } public boolean hasSubtitle() { return (onderschrift.length() != 0); } public void finalize() throws Throwable { super.finalize(); } } --- NEW FILE: Raw.java --- package com.egonw.woc; import java.lang.Character; public class Raw extends Formule { public Raw() { super(); } public Raw(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); if (bevatHTMLCode()) { //is al in HTML-formaat of bevat (veel) fouten return super.value(); } else { //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { resultaat.append(c.charValue()); }; if (c.isDigit(c.charValue())) { resultaat.append("<sub>"); resultaat.append(c.charValue()); resultaat.append("</sub>"); }; if ((c.charValue() == '+') || (c.charValue() == '-')) { resultaat.append("<sup>"); resultaat.append(c.charValue()); resultaat.append("</sup>"); } if ((c.charValue() == '(') || (c.charValue() == ']') ) { resultaat.append(c.charValue()); } // else: er zit een fout teken in de Smile // deze routine zou dan een fout moeten geven! }; } return resultaat.toString(); } private boolean bevatHTMLCode() { return (super.value().indexOf("<sub>") != -1); } } --- NEW FILE: Smile.java --- package com.egonw.woc; import java.lang.*; public class Smile extends Formule { public Smile() { super(); } public Smile(String s) { super(s); } private String toHexString() { StringBuffer resultaat = new StringBuffer(); for (int i=0; i< super.value().length(); i++) { resultaat.append(Integer.toHexString((int)super.value().charAt(i))); } return resultaat.toString(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); resultaat.append("<IMG HEIGHT=64 WIDTH=96 ALIGN=MIDDLE SRC='http://www.ch.ic.ac.uk/daycgi/smi2gif-small?" + toHexString() + "'>"); return resultaat.toString(); } public String toString() { return super.value(); } } --- NEW FILE: StoichFormule.java --- package com.egonw.woc; import java.lang.Character; public class StoichFormule extends Formule { public StoichFormule(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); boolean PrevCharIsDigit = false; //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { if ((c.charValue() != 'n') && (c.charValue() != 'm')) { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = false; } else { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); PrevCharIsDigit = true; }; resultaat.append(c.charValue()); } } else if (c.isDigit(c.charValue())) { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = true; } else if ((c.charValue() == '+') || (c.charValue() == '-')) { resultaat.append(c.charValue()); PrevCharIsDigit = true; } }; if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; return resultaat.toString(); } } --- NEW FILE: WocEngine.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; public class WocEngine { private WocReportFile wrf; private WoordTable wt; private FileReadAble wocrf; private FileWriteAble wocwf; private UnaryPredicate up; private BinaryPredicate sorter; private ConvertAble ca; private Path repository; public WocEngine(Path repository) { this.repository = repository; wrf = null; wt = null; wocrf = null; up = null; } public Enumeration getWTElements() { return wt.elements(); } public WoordTable getWT() { return wt; } public void setWocReportFile(WocReportFile wrf) { this.wrf = wrf; } public void setReadFile(FileReadAble wocrf) { this.wocrf = wocrf; } public void setWriteFile(FileWriteAble wocwf) { this.wocwf = wocwf; } public void setWoordTable(WoordTable wt) { this.wt = wt; } public void setFilterPredicate(UnaryPredicate up) { this.up = up; } public void setConvertAble(ConvertAble ca) { this.ca = ca; } public void setSortingPredicate(BinaryPredicate sorter) { this.sorter = sorter; } public void sort() { try { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (sorter == null) { if (wrf != null) wrf.reportText("WocEngine: No SortingPredicate set."); } else { WoordTable sorted = new WoordTable( sorter ); if (wrf != null) wrf.addHeader("Sorting WoordTable: " + sorter); sorted.add(wt); wt = sorted; } } catch (WocException e) { if (e instanceof WocFatalError) { if (wrf != null) wrf.reportWocFatalError((WocFatalError)e); } else if (e instanceof WocNotification) { if (wrf != null) wrf.reportWocNotification((WocNotification)e); }; } catch (Exception e) { if (wrf != null) { if (e instanceof NullPointerException) { wrf.reportException(e); wrf.reportText("Possibly predicate does not sort null!!"); } else { wrf.reportException(e); } } } } public void read() { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (wocrf == null) { if (wrf != null) wrf.reportText("WocEngine: No WocReadFile set."); } else { if (wrf != null) wrf.addHeader("Reading Items"); try { if (wocrf instanceof WocListReadFile) { wt = ((WocListReadFile)wocrf).read(); } else { Item item = wocrf.readItem(); while (!item.isEmpty()) { if (up == null) { wt.add(item); } else { if (up.execute(item)) wt.add(item); } item = wocrf.readItem(); }; }; } catch (WocException e) { if (e instanceof WocFatalError) { if (wrf != null) wrf.reportWocFatalError((WocFatalError)e); } else if (e instanceof WocNotification) { if (wrf != null) wrf.reportWocNotification((WocNotification)e); } else { System.out.println(e); } }; } } public void write() { try { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (wocwf == null) { if (wrf != null) wrf.reportText("WocEngine: No WocWriteFile set."); } else { if (wrf != null) { wrf.addHeader("Writing Items"); if (up !=null) wrf.addHeader(((Object)up).toString()); } wocwf.start(); Enumeration values = wt.elements(); boolean first = true; Item last = null; while (values.hasMoreElements()) { Item i = (Item)values.nextElement(); if (up == null) { if (first) { wocwf.startItems(i); first = false; } wocwf.writeItem(i); last = i; } else { // mag hij door filter? if (up.execute(i)) { if (first) { wocwf.startItems(i); first = false; } wocwf.writeItem(i); last = i; } } } if (last != null) wocwf.endItems(last); wocwf.end(); } } catch (IOException e) { if (wrf != null) wrf.addHeader("Write Error"); } } public void convert() { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (ca == null) { if (wrf != null) wrf.reportText("WocEngine: No ConvertAble set."); } else { if (wrf != null) { wrf.addHeader("Converting Items : " + ca.getName()); wrf.reportText(wt.size() + " items"); ca.set(wrf); } ca.set(wt); wt = ca.convert(); if (wrf != null) wrf.reportText(wt.size() + " items"); }; }; }; --- NEW FILE: WoordTable.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.objectspace.jgl.predicates.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.Serializable; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.exception.*; import com.egonw.woc.predicate.*; public class WoordTable extends OrderedSet { public WoordTable() { this( new LessWocWord() ); } public WoordTable(Item i) { super( new LessWocWord() ); super.add(i); } public WoordTable(BinaryPredicate bp) { super( bp ); } public SList toSList() { SList s = new SList(); Item i; Enumeration values = super.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); s.add(i); } return s; } public void add(WoordTable wt) throws WocNotification { Item i; Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); add(i); } } public void add(Container c) throws WocNotification { Item i; Enumeration values = c.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); add(i); } } public WoordTable merge(WoordTable wt) throws WocNotification { WoordTable tabel = new WoordTable(); Enumeration values = super.elements(); Item i; while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); tabel.add(i); } values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); tabel.add(i); } return tabel; } public void add(Item i) throws WocNotification { if (i == null) { throw new EmptyItemNotification(i); } else if (!i.contains(Item.NAME)) { throw new IncompleteItemNotification(i); } else { UnaryPredicate predicate = new BindSecondPredicate( new HasItem(), (String)i.get(Item.NAME) ); Item value = (Item)Finding.detect(this, predicate); if (value != null) { // samenvoegen ? // bv. als tweede een groep is if (i.contains(XItem.XGROUP)) { // als de laatste een groep is value.add(XItem.XGROUP, new String()); } else if (i.contains(Item.COMMENT)) { Vector commentlist = (Vector)i.get(Item.COMMENT); if (value.contains(Item.COMMENT)) { Vector commentlist2 = (Vector)value.get(Item.COMMENT); Enumeration enum = commentlist.elements(); while (enum.hasMoreElements()) { commentlist2.addElement( (Memo)enum.nextElement() ); } value.add(Item.COMMENT, commentlist2); } else { value.add(Item.COMMENT, commentlist); } // zie lijst ook copieren... vanwege afkortingen... try { Vector zielist = (Vector)i.get(Item.ZIE); if (value.contains(Item.ZIE)) { Vector zielist2 = (Vector)value.get(Item.ZIE); Enumeration enum = zielist.elements(); while (enum.hasMoreElements()) { zielist2.addElement((String)enum.nextElement() ); } value.add(Item.ZIE, zielist2); } else { value.add(Item.ZIE, zielist); } } catch (Exception e) { System.err.println(e.toString()); e.printStackTrace(); } } else { // als er geen group bijzit throw new DuplicateItemNotification(i); } } else { super.add(i); } } } } --- NEW FILE: XItem.java --- package com.egonw.woc; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.util.*; import com.egonw.woc.wml.*; public class XItem extends Item { private Object data[]; public final static int XNAME = 100; public final static int XMEDIA = 101; public final static int XINSERTS = 102; public final static int XREACTIE = 103; public final static int XFORMULA = 104; public final static int XGERMAN = 105; public final static int XAFKORT = 106; public final static int XGROUP = 107; public final static int XTYPE = 108; public final static int WOCNR = 109; public final static int XUNNR = 110; public final static int XENR = 111; public final static int XTOPICMAP = 112; public final static int XLATIN = 113; public final static int XNSC = 114; public final static int XFLASH = 115; public final static int XSEEONLY = 116; public final static int XMEERVOUD = 117; public final static int XPKA = 118; public final static int XPKB = 119; public final static int XFILENAME = 120; public final static int XCODE = 120; // thus degenerate with XFILENAME public final static int XDISCDATE = 121; public final static int XDISCPLACE = 122; public final static int XDISCPERSON = 123; public final static int XFRENCH = 124; public final static int XSPANISH = 125; public final static int XITALIAN = 126; public final static int XFRYSIAN = 127; public final static int NUMBER_OF_TYPES = 28; public XItem() { super(); this.data = new Object[NUMBER_OF_TYPES]; for (int i=0; i < NUMBER_OF_TYPES; i++) { this.data[i] = null; } } public boolean isEmpty() { boolean rv = true; for (int i=0; i < NUMBER_OF_TYPES; i++) { if (this.data[i] != null) { rv = false; } } return super.isEmpty() && rv; } public void add(int code, Object o) { if (code >= 100) { this.data[code-100] = o; } else { super.add(code, o); } } public void remove(int code) { if (code >= 100) { this.data[code-100] = null; } else { super.remove(code); } } public Object get(int code) { Object o = null; if (code >= 100) { switch (code) { case XItem.XITALIAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("IT")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XFRYSIAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("FY")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XFRENCH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("FR")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XSPANISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("SP")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XGERMAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("DE")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XLATIN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("LATIN")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; default: o = this.data[code-100]; break; } } else { switch (code) { case Item.ENGLISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("EN")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case Item.IUPACNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("IUPAC")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) o = xl.getValue(); } } } } break; case Item.AFKORT : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("ABBREV")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) o = xl.getValue(); } } } } else if (super.contains(Item.AFKORT)) { o = super.get(Item.AFKORT); } break; case Item.TRIVIALNAME : Vector b = new Vector(); if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("TRIVIAL")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL") && !xl.getValue().equals(get(Item.NAME))) b.addElement( xl.getValue() ); } } } } o = b; break; case Item.PDB : String s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-pdb")) s = x.getCDATA(); } } o = s; }; break; case Item.MOL : s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-mdl-molfile")) s = x.getCDATA(); } } o = s; }; break; case Item.PICTUREFILE : Picture p = new Picture(); if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && (!x.containsATT("VIEW") || !x.getATT("VIEW").equals("TOP") ) ) { String file = x.getCDATA().trim(); if (x.containsATT("TITLE")) { p = new Picture(file, x.getATT("TITLE")); } else { p = new Picture(file); } } } } o = p; }; break; case Item.REACTIE : s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME") && x.containsATT("VIEW")) { if (x.getATT("MIME").equals("image/gif") && x.getATT("VIEW").equals("TOP")) { s = x.getCDATA().trim(); } } } o = s; }; break; default : o = super.get(code); break; } } return o; } public boolean contains(int code) { boolean b = false; if (code >= 100) { switch (code) { case XItem.XGERMAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("DE")) b = true; } } } break; case XItem.XLATIN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("LATIN")) b = true; } } } break; default: b = (this.data[code-100] != null); break; } } else { switch (code) { case Item.ENGLISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("EN")) b = true; } } } break; case Item.TRIVIALNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("TRIVIAL")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL") && !xl.getValue().equals(get(Item.NAME))) b = true; } } } } break; case Item.IUPACNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("IUPAC")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) b = true; } } } } break; case Item.AFKORT : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("ABBREV")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) b = true; } } } } else { b = super.contains(Item.AFKORT); } break; case Item.PDB : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-pdb")) b = true; } } } break; case Item.MOL : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-mdl-molfile")) b = true; } } } break; case Item.PICTUREFILE : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && (!x.containsATT("VIEW") || !x.getATT("VIEW").equals("TOP") ) ) b = true; } } }; break; case Item.REACTIE : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME") && x.containsATT("VIEW")) { if (x.getATT("MIME").equals("image/gif") && x.getATT("VIEW").equals("TOP")) { b = true; } } } }; break; default : b = super.contains(code); break; } } return b; } } --- NEW FILE: XTYPE.java --- package com.egonw.woc; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.util.*; import com.egonw.woc.wml.*; public class XTYPE { public final static int CHEMICAL = 1; public final static int ABBREV = 2; public final static int VERW = 4; public final static int REACTION = 8; public final static int IUPAC_RULE = 16; public final static int POLYMER = 32; public final static int MIXTURE = 64; public final static int GROUP = 128; private final static int TOTAL_TYPES = 3; private int value; public XTYPE() { value = 0; } public void setType(int type) { if (!isType(type)) { value += type; } } public boolean isType(int type) { boolean result = false; int foo = value; for (int i = TOTAL_TYPES ; i > 0; i--) { if (((foo - power(2,i-1)) >= 0)) { if ( power(2,i-1) == type ) result = true; foo -= power(2,i-1); } } return result; } private int power(int number, int power) { int result = 1; for (int i=1; i<=power; i++) { result = result * number; } return result; } } |