+ /**
+ * Sets the given node to the “online” state.
+ *
+ * @param node
+ * The node to set online
+ */
+ public void setOnline(Node node) {
+ nodeLabels.get(node).setOnline();
+ }
+
+ /**
+ * Sets the given node to the “offline” state in the status bar.
+ *
+ * @param node
+ * The node to set offline
+ */
+ public void setOffline(Node node) {
+ nodeLabels.get(node).setOffline();
+ }
+
+ /**
+ * Sets the given node to the “error” state in the status bar.
+ *
+ * @param node
+ * The node to set the error state for
+ */
+ public void setError(Node node) {
+ nodeLabels.get(node).setError();
+ }
+
+ //
+ // ACTIONS
+ //
+
+ /**
+ * Adds a node to the menu.
+ *
+ * @param node
+ * The node to add
+ */
+ void addNode(Node node) {
+ JMenu newNodeMenu = new JMenu(node.getName());
+ nodeMenus.put(node, newNodeMenu);
+ newNodeMenu.add(swingInterface.getNodeConnectAction(node));
+ newNodeMenu.add(swingInterface.getNodeDisconnectAction(node));
+ newNodeMenu.addSeparator();
+ newNodeMenu.add(swingInterface.getNodeEditAction(node));
+ newNodeMenu.add(swingInterface.getNodeDeleteAction(node));
+ nodeMenu.add(newNodeMenu);
+ NodeLabel nodeLabel = new NodeLabel(swingInterface, node, onlineIcon, offlineIcon, errorIcon);
+ nodeLabels.put(node, nodeLabel);
+ statusBar.addSideComponent(nodeLabel);
+ for (int tabIndex = 0, tabCount = projectPane.getTabCount(); tabIndex < tabCount; tabIndex++) {
+ Component tabComponent = projectPane.getComponentAt(tabIndex);
+ if (!(tabComponent instanceof ProjectPanel)) {
+ continue;
+ }
+ ((ProjectPanel) tabComponent).addNode(node);
+ }
+ node.addPropertyChangeListener(this);
+ }
+
+ /**
+ * Removes a node from the menu.
+ *
+ * @param node
+ * The node to remove
+ */
+ void removeNode(Node node) {
+ nodeMenu.remove(nodeMenus.remove(node));
+ statusBar.removeSideComponent(nodeLabels.remove(node));
+ for (int tabIndex = 0, tabCount = projectPane.getTabCount(); tabIndex < tabCount; tabIndex++) {
+ Component tabComponent = projectPane.getComponentAt(tabIndex);
+ if (!(tabComponent instanceof ProjectPanel)) {
+ continue;
+ }
+ ((ProjectPanel) tabComponent).addNode(node);
+ }
+ node.removePropertyChangeListener(this);
+ }
+
+ /**
+ * Adds a project to the project pane.
+ *
+ * @param project
+ * The project to add
+ * @param switchToProject
+ * <code>true</code> to switch to the new panel,
+ * <code>false</code> to not change the current panel
+ */
+ void addProject(Project project, boolean switchToProject) {
+ ProjectPanel projectPanel = new ProjectPanel(swingInterface, project);
+ int newTabIndex = projectPane.getTabCount();
+ projectPane.add(project.getName(), projectPanel);
+ projectPane.setToolTipTextAt(newTabIndex, project.getDescription());
+ project.addPropertyChangeListener(this);
+ if (switchToProject) {
+ projectPane.setSelectedIndex(newTabIndex);
+ while (project.getBasePath().length() == 0) {
+ JOptionPane.showMessageDialog(this, I18n.get("mainWindow.information.changeProjectBasePath.message"), I18n.get("mainWindow.information.changeProjectBasePath.title"), JOptionPane.INFORMATION_MESSAGE);
+ projectPanel.changeBasePath();
+ }
+ }
+ }
+
+ /**
+ * Removes the pane containing the given project.
+ *
+ * @param project
+ * The project whose pane to remove
+ */
+ void removeProject(Project project) {
+ int projectIndex = getProjectIndex(project);
+ projectPane.remove(projectIndex);
+ }
+
+ /**
+ * @param project
+ */
+ void projectInsertStarted(Project project) {
+ int projectIndex = getProjectIndex(project);
+ if (projectIndex == -1) {
+ return;
+ }
+ projectPane.setTitleAt(projectIndex, I18n.get("projectPanel.title.starting", project.getName()));
+ }
+
+ /**
+ * @param project
+ * @param totalBlocks
+ * @param requiredBlocks
+ * @param successfulBlocks
+ * @param failedBlocks
+ * @param fatallyFailedBlocks
+ * @param finalizedTotal
+ */
+ void projectInsertProgressed(Project project, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
+ int projectIndex = getProjectIndex(project);
+ if (projectIndex == -1) {
+ return;
+ }
+ projectPane.setTitleAt(projectIndex, I18n.get("projectPanel.title.progress", project.getName(), requiredBlocks / (double) successfulBlocks));
+ }
+
+ /**
+ * @param project
+ */
+ void projectInsertGeneratedURI(Project project) {
+ /* TODO - update panel. */
+ }
+
+ /**
+ * @param project
+ * @param success
+ */
+ void projectInsertFinished(Project project, boolean success) {
+ int projectIndex = getProjectIndex(project);
+ if (projectIndex == -1) {
+ return;
+ }
+ projectPane.setTitleAt(projectIndex, project.getName());
+ }
+