package org.mongodb.meclipse.views.objects;
import static org.mongodb.meclipse.MeclipsePlugin.getCaption;
import java.io.File;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.handlers.IHandlerService;
import org.json.JSONObject;
import org.mongodb.meclipse.util.IOUtils;
import org.mongodb.meclipse.util.JSONUtils;
import org.mongodb.meclipse.util.RequiredInputValidator;
import org.mongodb.meclipse.util.UIUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoException;
/**
* @author Flavio [FlaPer87] Percoco Premoli
*/
public final class Collection extends CollectionBase implements IAdaptable {
private DBCollection col;
private IAction rename;
private IAction delete;
private IAction insert;
private CollectionType type = null;
public enum CollectionType {
SYSINDEX, COLLECTION
}
public Collection(String name) {
super(name);
makeActions();
}
private void makeActions() {
insert = new Action(getCaption("collection.insertDoc")) {
@Override
public void run() {
FileDialog dialog = new FileDialog(view.getSite().getShell(),
SWT.OPEN);
dialog.setFilterExtensions(new String[]{"*.json"});
String result = dialog.open();
if (result != null) {
try {
String jsonText = IOUtils.readFile(new File(result));
JSONObject jsonObj = new JSONObject(jsonText);
col.insert(JSONUtils.toDBObject(jsonObj));
} catch (Exception ex) {
UIUtils.openErrorDialog(view.getSite().getShell(),
ex.toString());
}
}
}
};
rename = new Action(getCaption("collection.renameColl")) {
@Override
public void run() {
InputDialog dialog = new InputDialog(view.getSite().getShell(),
getCaption("collection.renameColl"),
getCaption("collection.msg.newCollName"),
col.getName(), new RequiredInputValidator(
getCaption("collection.msg.inputCollName")));
if (dialog.open() == InputDialog.OK) {
try {
col.rename(dialog.getValue());
} catch (MongoException ex) {
UIUtils.openErrorDialog(view.getSite().getShell(),
ex.toString());
}
view.getViewer().refresh(getParent());
}
}
};
delete = new Action(getCaption("collection.deleteColl")) {
@Override
public void run() {
if (MessageDialog.openConfirm(view.getSite().getShell(),
getCaption("confirm"), String.format(
getCaption("collection.msg.reallyDeleteColl"),
col.getName()))) {
col.drop();
view.getViewer().refresh(getParent());
}
}
};
}
@Override
public void fillContextMenu(IMenuManager manager) {
manager.add(insert);
manager.add(rename);
manager.add(delete);
manager.add(new Separator());
super.fillContextMenu(manager);
}
@Override
public void setParent(TreeParent parent) {
super.setParent(parent);
col = ((Database) this.getParent()).getDB().getCollection(
this.getName());
}
@Override
public DBCollection getCollection() {
return col;
}
public CollectionType getType() {
if (type == null) {
if (col.getName().equalsIgnoreCase("system.indexes")) {
type = CollectionType.SYSINDEX;
} else {
type = CollectionType.COLLECTION;
}
}
return type;
}
@Override
public void doubleClickAction() {
IHandlerService handlerService = (IHandlerService) view.getSite()
.getService(IHandlerService.class);
try {
handlerService.executeCommand(
"org.mongodb.meclipse.editors.handlers.CallEditor", null);
} catch (Exception ex) {
System.out.println(ex.toString());
// throw new RuntimeException(
// "org.mongodb.meclipse.editors.handlers.CallEditor not found");
}
}
@Override
public DBObject getQuery() {
return new BasicDBObject();
}
}