if (child.getAsset().childrenLoaded()) { if (child.getChildCount() == 0) { child.getAsset().propagateChildren(child); level++; continue;  } }
	public void loadChildAssets(final String[] assetids, final boolean selectAll) {		MatrixStatusBar.setStatus(Matrix.translate("asset_map_status_bar_requesting"));		Runnable runner = new Runnable() {			public void run() {				MatrixTreeNode parent = (MatrixTreeNode)getModel().getRoot();				int numAssets = assetids.length;				int level = 0;				int childIndex = 0;				int loadedNodes = 0;				Vector checkedNodes = new Vector();								// clear all other selections				tree.clearSelection();				while (level < numAssets)				{					if (assetids[level].equals("1")) {						//skip root asset						level++;						continue;					}					if (!checkedNodes.isEmpty() && checkedNodes.contains(assetids[level])) {						// we have already traversed this						return;					}					childIndex = parent.getChildAssetIndex(assetids[level]);					checkedNodes.add(assetids[level]);					if (childIndex < 0) {						TreePath path = getPathToRoot(parent);						tree.addSelectionPath(path);						scrollPathToVisible(path);												MatrixStatusBar.setStatusAndClear(Matrix.translate("asset_map_status_bar_requesting"), 1000);						Object[] transArgs = {							"Could not locate asset (#" + assetids[level] +")"						};						String message = Matrix.translate("asset_map_error_loading_children", transArgs);						GUIUtilities.error(MatrixTree.this, message, Matrix.translate("asset_map_dialog_title_error"));						return;					}										MatrixTreeNode child = (MatrixTreeNode)getModel().getChild(parent,childIndex);					if (child.getAsset().childrenLoaded()) {						if (child.getChildCount() == 0) {							child.getAsset().propagateChildren(child);							level++;							continue;													}					}					if ((level+1) == numAssets) {						// we dont need to load the children of this node						TreePath path = getPathToRoot(child);						tree.addSelectionPath(path);						scrollPathToVisible(path);						level++;					} else {						insertLoadingNode(child);						if (child != null) {							parent = child;							level++;							try {								AssetManager.refreshAsset(child);								removeLoadingNode(child);								TreePath path = getPathToRoot(child);																if ((level == numAssets) || (selectAll))								{									// we have reached the last node, scroll to path									tree.addSelectionPath(path);									scrollPathToVisible(path);								} else {									tree.expandPath(path);								}								loadedNodes += child.getChildCount();															}							catch (IOException ioe)							{								MatrixStatusBar.setStatusAndClear(Matrix.translate("asset_map_status_bar_requesting"), 1000);								Object[] transArgs = {									ioe.getMessage()								};								String message = Matrix.translate("asset_map_error_loading_children", transArgs);								GUIUtilities.error(MatrixTree.this, message, Matrix.translate("asset_map_dialog_title_error"));								Log.log(message, MatrixTree.class, ioe);							}						}					}				}								if (loadedNodes == 1) {					MatrixStatusBar.setStatusAndClear(Matrix.translate("asset_map_status_bar_loaded_child"), 3000);				} else {					Object[] transArgs = {						new Integer(loadedNodes)					};					MatrixStatusBar.setStatusAndClear(Matrix.translate("asset_map_status_bar_loaded_children", transArgs), 3000);				}			}		};		SwingUtilities.invokeLater(runner);	}