public static void loadBlockDrawerSets( Workspace workspace, Element root, FactoryManager manager) { Pattern attrExtractor = Pattern.compile("\"(.*)\""); Matcher nameMatcher; NodeList drawerSetNodes = root.getElementsByTagName("BlockDrawerSet"); Node drawerSetNode; for (int i = 0; i < drawerSetNodes.getLength(); i++) { drawerSetNode = drawerSetNodes.item(i); if (drawerSetNode.getNodeName().equals("BlockDrawerSet")) { NodeList drawerNodes = drawerSetNode.getChildNodes(); Node drawerNode; // retreive drawer information of this bar for (int j = 0; j < drawerNodes.getLength(); j++) { drawerNode = drawerNodes.item(j); if (drawerNode.getNodeName().equals("BlockDrawer")) { String drawerName = null; Color buttonColor = Color.blue; StringTokenizer col; nameMatcher = attrExtractor.matcher(drawerNode.getAttributes().getNamedItem("name").toString()); if (nameMatcher.find()) { // will be true drawerName = nameMatcher.group(1); } // get drawer's color: Node colorNode = drawerNode.getAttributes().getNamedItem("button-color"); // if(colorNode == null){ // buttonColor = Color.blue; // System.out.println("Loading a drawer without defined color: "); // for(int ai=0; ai<drawerNode.getAttributes().getLength(); ai++){ // // System.out.println("\t"+drawerNode.getAttributes().item(ai).getNodeName()+ // ", "+drawerNode.getAttributes().item(ai).getNodeValue()); // } // }else{ if (colorNode != null) { nameMatcher = attrExtractor.matcher(colorNode.toString()); if (nameMatcher.find()) { // will be true col = new StringTokenizer(nameMatcher.group(1)); if (col.countTokens() == 3) { buttonColor = new Color( Integer.parseInt(col.nextToken()), Integer.parseInt(col.nextToken()), Integer.parseInt(col.nextToken())); } else { buttonColor = Color.BLACK; } } } manager.addStaticDrawer(drawerName, buttonColor); // get block genuses in drawer and create blocks NodeList drawerBlocks = drawerNode.getChildNodes(); Node blockNode; ArrayList<RenderableBlock> drawerRBs = new ArrayList<RenderableBlock>(); for (int k = 0; k < drawerBlocks.getLength(); k++) { blockNode = drawerBlocks.item(k); if (blockNode.getNodeName().equals("BlockGenusMember")) { String genusName = blockNode.getTextContent(); assert BlockGenus.getGenusWithName(genusName) != null : "Unknown BlockGenus: " + genusName; Block newBlock; // don't link factory blocks to their stubs because they will // forever remain inside the drawer and never be active newBlock = new Block(workspace, genusName, false); drawerRBs.add( new FactoryRenderableBlock(workspace, manager, newBlock.getBlockID())); } } manager.addStaticBlocks(drawerRBs, drawerName); } } } } }