/**
* SlingBeans - NetBeans Sling plugin https://github.com/jkan997/SlingBeans
* Licensed under Apache 2.0 license http://www.apache.org/licenses/LICENSE-2.0
*/
package org.jkan997.slingbeans.nbactions.node;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import org.jkan997.slingbeans.dialogs.NewNodeDialog;
import org.jkan997.slingbeans.helper.IOHelper;
import org.jkan997.slingbeans.helper.LogHelper;
import org.jkan997.slingbeans.helper.SwingHelper;
import org.jkan997.slingbeans.nbactions.AbstractAction;
import org.jkan997.slingbeans.nbprojects.maven.LocalSlingNode;
import org.jkan997.slingbeans.nbtree.SlingNode;
import org.jkan997.slingbeans.nbtree.SlingRootNode;
import org.jkan997.slingbeans.slingfs.FileObject;
import org.jkan997.slingbeans.slingfs.FileSystem;
import org.jkan997.slingbeans.slingfs.types.NodeTypeSet;
import org.openide.nodes.AbstractNode;
public class AddNodeAction extends AbstractAction {
private SlingNode slingNode;
private LocalSlingNode localSlingNode;
private String initialSelection = null;
private boolean lockSelection = false;
private SlingRootNode slingRootNode;
public AddNodeAction(SlingNode node) {
setActionName("Add node...");
this.slingNode = node;
}
public AddNodeAction(AbstractNode node) {
setActionName("Add node...");
if (node instanceof SlingNode) {
slingNode = (SlingNode) node;
}
if (node instanceof SlingRootNode) {
slingRootNode = (SlingRootNode) node;
}
if (node instanceof LocalSlingNode) {
localSlingNode = (LocalSlingNode) node;
}
}
public boolean isLockSelection() {
return lockSelection;
}
public void setLockSelection(boolean lockSelection) {
this.lockSelection = lockSelection;
}
public String getInitialSelection() {
return initialSelection;
}
public void setInitialSelection(String initialSelection) {
this.initialSelection = initialSelection;
}
@Override
public void actionPerformed(ActionEvent e) {
FileSystem fs;
try {
NewNodeDialog npd = new NewNodeDialog(null, true);
if (initialSelection != null) {
npd.setInitialSelection(initialSelection);
}
npd.setNodeTypes(getNodeTypes());
SwingHelper.showDialog(npd);
if (npd.isCreateNode()) {
String selectedNodeType = npd.getSelectedNodeType();
String selectedNodeName = npd.getSelectedNodeName();
File selectedFile = npd.getSelectedFile();
byte[] fileContent = null;
if ((selectedFile != null) && (selectedFile.exists())) {
fileContent = IOHelper.readFileToBytes(selectedFile);
}
createNode(selectedNodeName, selectedNodeType, fileContent);
}
} catch (Exception ex) {
LogHelper.logError(ex);
}
}
private void createNode(String selectedNodeName, String selectedNodeType, byte[] content) throws IOException {
if (slingNode != null) {
FileSystem fs = slingNode.getFileObject().getFileSystem();
FileObject parentFo = slingNode.getFileObject();
if (selectedNodeType.equals(NodeTypeSet.NT_FILE)) {
String newNodePath = "/" + parentFo.getPath() + "/" + selectedNodeName;
if (content != null) {
fs.createFile(newNodePath, content);
} else {
fs.createFile(newNodePath, "");
}
} else {
parentFo.createNode(selectedNodeName, selectedNodeType);
}
fs.commmit();
slingNode.refresh(false);
}
if (slingRootNode != null) {
// FileSystem fs = slingRootNode.getFileObject().getFileSystem();
}
}
private Set getNodeTypes() {
if (slingNode != null) {
try {
FileSystem fs = slingNode.getFileObject().getFileSystem();
return fs.getNodeTypes();
} catch (Exception ex) {
LogHelper.logError(ex);
}
}
return Collections.EMPTY_SET;
}
}