/**
* 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.nbprojects.maven.actions;
import java.awt.event.ActionEvent;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import org.jkan997.slingbeans.helper.LogHelper;
import org.jkan997.slingbeans.helper.NbNodeHelper;
import org.jkan997.slingbeans.helper.SwingHelper;
import org.jkan997.slingbeans.nbprojects.maven.LocalSlingNode;
import org.jkan997.slingbeans.nbprojects.maven.LocalSlingRootNode;
import org.jkan997.slingbeans.nbprojects.maven.MavenProjectUtils;
import org.jkan997.slingbeans.nbservices.SlingFsFactory;
import org.jkan997.slingbeans.nbtree.SlingTreeTopComponent;
import org.jkan997.slingbeans.slingfs.FileSystem;
import org.jkan997.slingbeans.vlt.VltManager;
import org.netbeans.api.progress.ProgressUtils;
import org.openide.nodes.Node;
import org.openide.windows.WindowManager;
/**
*
* @author jkan997
*/
public abstract class VltAction extends AbstractAction {
protected boolean importFromRemote = false;
public VltAction(Node node) {
this.node = node;
LogHelper.logInfo(this, "Class %s init", this.getClass().getName());
}
@Override
public void actionPerformed(ActionEvent e) {
final Runnable loadWorkflowsTask = new Runnable() {
@Override
public void run() {
VltAction.this.runAction();
}
};
ProgressUtils.runOffEventDispatchThread(loadWorkflowsTask, importFromRemote ? "Importing from remote" : "Exporting to remote", new AtomicBoolean(false), false);
}
private void runAction() {
LogHelper.logInfo(this, "Action %s", this.getClass().getName());
try {
SlingFsFactory slingFsFactory = SlingFsFactory.lookup();
String fsId = slingFsFactory.getDefualtFileSystemId();
if (fsId == null) {
SwingHelper.showMessage("Please connect to Sling remote repository");
return;
}
FileSystem fs = slingFsFactory.getFileSystem(fsId);
LogHelper.logInfo(this, "Found fsId:%s , fs: %s", fsId, "" + fs);
//SwingHelper.showMessage("Please connect to Sling remote repository "+fs);
if (fs != null) {
VltManager vltManager = fs.getVltManager();
final LocalSlingRootNode rootNode = this.getRootNode();
String currentNodePath = null;
LocalSlingNode currentNode = null;
currentNode = this.getLocalSlingNode();
boolean isRootNode = false;
if (currentNode != null) {
currentNodePath = currentNode.getFileObject().getFilePath();
}
if ((this.node instanceof LocalSlingRootNode)) {
isRootNode = true;
}
Writer outputWriter = this.getOutputWriter();
if (!importFromRemote) {
if (currentNode != null) {
if (currentNode.getLevel() <= 1) {
outputWriter.write(String.format("Refusing to export first level node %s to remote server\n", currentNode.getFilePath()));
} else {
LogHelper.logInfo(this, "VltManager import %s, %s", rootNode.getContentPath(), currentNodePath);
vltManager.importContentToRemote(rootNode.getContentPath(), currentNodePath);
outputWriter.write(String.format("Exported %s to remote server %s\n", currentNode.getFilePath(), fs.toString()));
}
} else {
LogHelper.logInfo(this, "VltManager export current node is null.");
}
} else if ((currentNode != null) && (!isRootNode)) {
LogHelper.logInfo(this, "VltManager export %s, %s", rootNode.getContentPath(), currentNode.getFileObject().getFilePath());
vltManager.exportContentFromRemote(rootNode.getContentPath(), currentNode.getFileObject().getFilePath());
outputWriter.write(String.format("Imported %s from remote server %s\n", currentNode.getFilePath(), fs.toString()));
} else {
String ROOT_PATH = "/";
LogHelper.logInfo(this, "VltManager export (root node) %s, %s", rootNode.getContentPath(), ROOT_PATH);
vltManager.exportContentFromRemote(rootNode.getContentPath(), ROOT_PATH);
outputWriter.write(String.format("Imported %s from remote server %s\n", ROOT_PATH, fs.toString()));
}
if (importFromRemote) {
// DO NOT NEED TO REFRESH LOCAL TREE AFTER EXPORTING
Runnable uiActionAfterRefresh = new Runnable() {
@Override
public void run() {
String[] pathArr = NbNodeHelper.getLocalNodePath(node);
MavenProjectUtils.selectAndExpandNode(rootNode.getProject(), pathArr);
}
};
rootNode.refresh(uiActionAfterRefresh);
}
}
} catch (Exception ex) {
LogHelper.logError(ex);
}
}
}