class DescriptorEngine {

    public String[] getDictionaryClass(String identifier) {

        Entry[] dictEntries = dict.getEntries();

        String specRef = getSpecRef(identifier);
        if (specRef == null) {
            logger.error("Cannot determine specification for id: ", identifier);
            return new String[0];
        }
        List<String> dictClasses = new ArrayList<String>();

        for (Entry dictEntry : dictEntries) {
            if (!dictEntry.getClassName().equals("Descriptor")) continue;
            if (dictEntry.getID().equals(specRef.toLowerCase())) {
                Element rawElement = (Element) dictEntry.getRawContent();
                Elements classifications = rawElement.getChildElements("isClassifiedAs", dict.getNS());
                for (int i = 0; i < classifications.size(); i++) {
                    Element element = classifications.get(i);
                    Attribute attr = element.getAttribute("resource", rdfNS);
                    if ((attr.getValue().indexOf("molecularDescriptor") >= 0)
                            || (attr.getValue().indexOf("atomicDescriptor") >= 0)) {
                        continue;
                    }
                    String[] tmp = attr.getValue().split("#");
                    dictClasses.add(tmp[1]);
                }
            }
        }

        if (dictClasses.size() == 0)
            return null;
        else
            return (String[]) dictClasses.toArray(new String[]{});
    }

    public  DescriptorEngine(List<String> classNames, IChemObjectBuilder builder);
    public  DescriptorEngine(Class<? extends IDescriptor> c, IChemObjectBuilder builder);

}