List attributeList = sts.retrieveImageAttributes(name,selectedNode.getDBName(), imageIDList);  for(Iterator iter = attributeList.iterator(); iter.hasNext();)
for(int i=0;i<hierarchyList.size();i++)
        public void run()        {            if(model == null) return;            if(selectedNode == null) return;            if(!(selectedNode instanceof SemanticTypeTree.ElementNode) ||               selectedNode.getFQName() == null)            {                fireModeCancel();                currentMethod = null;                currentValueMethod = null;                return;            }                        DataElementType dataType =                ((SemanticTypeTree.ElementNode)selectedNode).getType();                        if(dataType == DataElementType.BOOLEAN)            {                gradient.setDiscrete(true);            }            else            {                gradient.setDiscrete(false);            }                        if(selectedNode.isLazilyInitialized())            {                // get attribute                elementName = selectedNode.getFQName();                SemanticTypeTree.TreeNode pathNode = selectedNode;                SemanticTypeTree.TypeNode parentNode = null;                while(pathNode.getParent() instanceof SemanticTypeTree.TypeNode &&                      pathNode.getParent() != null)                {                    parentNode = (SemanticTypeTree.TypeNode)pathNode.getParent();                    pathNode = parentNode;                }                SemanticType type =                     ((SemanticTypeTree.TypeNode)pathNode).getType();                attributeName = type.getName();                                if(dataType == DataElementType.BOOLEAN)                {                    displayBooleanInformation(attributeName,elementName);                }                else                {                    analyzeInformation(attributeName,elementName);                    displayInformation(attributeName,elementName);                }                            }            else            {                selectedNode.markAsInitialized(true);                BrowserEnvironment env = BrowserEnvironment.getInstance();                BrowserAgent agent = env.getBrowserAgent();                SemanticTypesService sts = agent.getSemanticTypesService();                                SemanticTypeTree.TreeNode pathNode = selectedNode;                SemanticTypeTree.TypeNode parentNode = null;                while(pathNode.getParent() instanceof SemanticTypeTree.TypeNode &&                      pathNode.getParent() != null)                {                    parentNode = (SemanticTypeTree.TypeNode)pathNode.getParent();                    parentNode.markAsInitialized(true);                    Set children = parentNode.getChildren();                    for(Iterator iter = children.iterator(); iter.hasNext();)                    {                        Object o = iter.next();                        // NOTE: this depends on the contract that the STS                        // retrieves the attribute as a whole, which is correct                        // but hard to explicitly formalize and check                        if(o instanceof SemanticTypeTree.ElementNode)                        {                            ((SemanticTypeTree.ElementNode)o).                                markAsInitialized(true);                        }                    }                    pathNode = parentNode;                }                                SemanticType parentType = parentNode.getType();                String name = parentType.getName();                attributeName = name;                elementName = selectedNode.getFQName();                BrowserModel source = model.getInfoSource();                                Map imageIDMap = source.getImageDataMap();                List imageIDList = new ArrayList(imageIDMap.keySet());                Collections.sort(imageIDList);                                if(status != null)                {                    status.showMessage("Loading "+name+" attributes...");                }                try                {                    List attributeList =                        sts.retrieveImageAttributes(name,selectedNode.getDBName(),                                                    imageIDList);                                        for(Iterator iter = attributeList.iterator(); iter.hasNext();)                    {                        Attribute attribute = (Attribute)iter.next();                        int imageID = attribute.getImage().getID();                        ThumbnailDataModel tdm =                            (ThumbnailDataModel)imageIDMap.get(new Integer(imageID));                        AttributeMap attrMap = tdm.getAttributeMap();                        attrMap.putAttribute(attribute);                    }                                        if(status != null)                    {                        status.showMessage("Loaded "+name+" attributes.");                    }                                        if(dataType == DataElementType.BOOLEAN)                    {                        displayBooleanInformation(attributeName,elementName);                    }                    else                    {                        analyzeInformation(attributeName,elementName);                        displayInformation(attributeName,elementName);                    }                }                catch(DSOutOfServiceException dso)                {                    if(status != null)                    {                        status.showMessage("could not retrieve "+name+" data.");                    }                }                catch(DSAccessException dsa)                {                    if(status != null)                    {                        status.showMessage("could not retrieve "+name+" data.");                    }                }            }        }