package com.onpositive.gae.baseviewer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabFolder2Listener;
import org.eclipse.swt.custom.CTabFolderEvent;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.part.PageBook;
import com.onpositive.commons.elements.RootElement;
import com.onpositive.commons.elements.UniversalUIElement;
import com.onpositive.gae.tools.GaeBridge;
import com.onpositive.gae.tools.UIUtils;
import com.onpositive.gae.tools.core.CheckLaunchJob;
import com.onpositive.gae.tools.license.LicenseChecker;
import com.onpositive.semantic.model.api.command.ICommand;
import com.onpositive.semantic.model.api.command.ICommitListener;
import com.onpositive.semantic.model.api.property.IValueListener;
import com.onpositive.semantic.model.api.property.adapters.ITextLabelProvider;
import com.onpositive.semantic.model.binding.Binding;
import com.onpositive.semantic.model.realm.Realm;
import com.onpositive.semantic.model.ui.property.editors.DisposeBindingListener;
import com.onpositive.semantic.model.ui.property.editors.OneLineTextElement;
import com.onpositive.semantic.model.ui.property.editors.structured.ComboEnumeratedValueSelector;
public class BlobStoreViewPart extends DataViewPart {
{
tableUi = new BlobStoreTableUI();
}
public void createPartControl(Composite parent) {
creation = true;
tableUi = new BlobStoreTableUI();
try {
com.onpositive.gae.tools.license.LicenseChecker.checkLicense(true);
GridLayout layout2 = new GridLayout(1, false);
layout2.marginHeight = 0;
layout2.marginWidth = 0;
parent.setLayout(layout2);
Composite owner = new Composite(parent, SWT.NONE);
pageBook = new PageBook(parent, SWT.NONE);
final Browser lm = new Browser(pageBook, SWT.NONE);
lm.setText("<h3>No open tabs</h3> <p>To show Blobs from Blob Storage, please:<br>1) Choose connection configuration between 'manipulate with local server' or 'manipulate with development server';<br>2) click either 'add view'.");
viewHolder = new CTabFolder(pageBook, SWT.NONE | SWT.CLOSE
| SWT.BORDER);
pageBook.showPage(lm);
owner.setLayoutData(GridDataFactory.fillDefaults()
.grab(true, false).create());
pageBook.setLayoutData(GridDataFactory.fillDefaults()
.grab(true, true).create());
viewHolder.setLayoutData(GridDataFactory.fillDefaults()
.grab(true, true).create());
toolBarManager = new ToolBarManager();
dAction = tableUi.createActions(toolBarManager, false);
Composite mn = new Composite(viewHolder, SWT.NONE);
for (IContributionItem i : toolBarManager.getItems()) {
if (i instanceof ActionContributionItem) {
ActionContributionItem b = (ActionContributionItem) i;
b.getAction().setEnabled(false);
}
}
mn.setLayout(new FillLayout());
ToolBar localToolbar = toolBarManager.createControl(owner);
viewHolder.setTopRight(mn);
viewHolder.layout(true, true);
viewHolder.addCTabFolder2Listener(new CTabFolder2Listener() {
public void showList(CTabFolderEvent event) {
}
public void restore(CTabFolderEvent event) {
}
public void minimize(CTabFolderEvent event) {
}
public void maximize(CTabFolderEvent event) {
}
public void close(CTabFolderEvent event) {
Widget item = event.item;
item.dispose();
if (viewHolder.getItems().length == 0) {
statLabel.setText("");
}
}
});
// viewHolder.setTopRight(owner);
GridLayout layout = new GridLayout(3, false);
layout.marginHeight = 0;
// layout.marginHeight=0;
owner.setLayout(layout);
// Link la = new Link(owner, SWT.NONE);
// la.setText("Add view of kind:");
RootElement r = new RootElement(owner);
r.setLayoutData(GridDataFactory.fillDefaults().grab(true, false)
.create());
GridLayout layout32 = new GridLayout(7, false);
r.setLayout(layout32);
layout32.marginHeight = 3;
Binding bnd = new Binding("");
// //\\\\
// bnd.setValue(kind, null);
// //\\\\\
// bnd.setName("");
// bnd.setRequired(true);
Binding b = new Binding(this);
b.setAutoCommit(true);
OneLineTextElement<String> l = new OneLineTextElement<String>();
l.setCaption("Display not more then:");
Binding binding2 = b.getBinding("limit");
binding2.setRealm(new Realm<String>("All", "10", "100", "500",
"1000", "10000"));
binding2.addCommitListener(new ICommitListener() {
public void commitPerformed(ICommand command) {
CTabItem selection = viewHolder.getSelection();
if (selection != null) {
BaseDataFacade bf = (BaseDataFacade) selection
.getData();
try {
bf.setLimit(Integer.parseInt(limit));
} catch (NumberFormatException e1) {
bf.setLimit(-1);
}
}
}
});
l.setBinding(binding2);
l.setLayoutData(GridDataFactory.fillDefaults().hint(50, -1)
.create());
ComboEnumeratedValueSelector<IProject> v = new ComboEnumeratedValueSelector<IProject>();
DisposeBindingListener.linkBindingLifeCycle(b, l);
binding = new Binding("");
binding.setRequired(true);
binding.setName("Project:");
projects = new Realm<IProject>();
initProjects(projects);
binding.setRealm(projects);
v.setBinding(binding);
if (projectString != null) {
for (IProject p : projects) {
if (p.getName().equals(projectString)) {
setProject(JavaCore.create(p));
}
}
}
DisposeBindingListener.linkBindingLifeCycle(binding, v);
binding.addValueListener(new IValueListener<Object>() {
public void valueChanged(Object oldValue, Object newValue) {
IProject pr = null;
if (newValue instanceof String) {
pr = ResourcesPlugin.getWorkspace().getRoot()
.getProject(newValue.toString());
}
if (newValue instanceof IProject) {
pr = (IProject) newValue;
}
if (pr != null) {
IJavaProject create = JavaCore.create(pr);
if (project == null
|| !create.getElementName().equals(
project.getElementName())) {
setProject(create);
}
} else {
setProject(null);
}
}
});
binding.setAdapter(ITextLabelProvider.class,
new ITextLabelProvider() {
public String getText(Object object) {
if (object == null) {
return "";
}
IProject p = (IProject) object;
return p.getName();
}
public String getDescription(Object object) {
return "";
}
});
r.add(l);
r.add(v);
r.add(new UniversalUIElement<ToolBar>(ToolBar.class, SWT.NONE) {
protected ToolBar createControl(Composite conComposite) {
ToolBarManager tm = new ToolBarManager();
tm.add(new Action("Add view") { // Add view from development
// server
{
/*
* ToolBarManager tm = new ToolBarManager(); boolean
* isLocal =
* Activator.getDefault().getPreferenceStore()
* .getDefaultBoolean("CONNECTION_MODE");
*/
/*
* if(isLocal){
* setText("Add view from local server");
* setToolTipText("Add view from local server");
*/
setImageDescriptor(Activator
.imageDescriptorFromPlugin(
Activator.PLUGIN_ID,
"/icons/exec_view_obj.gif"));
// setT
/*
* }else{
* setText("Add view from production server");
* setToolTipText
* ("Add view from production server");
*
* setImageDescriptor(Activator
* .imageDescriptorFromPlugin( Activator.PLUGIN_ID,
* "/icons/locale.png"));
*
* }
*/
}
public void run() {
boolean isLocal = isDebug();
if (isLocal) {
addView(true);
} else {
addView(false);
}
}
});
/*
* tm.add(new Action("Add view from production server") {
*
* { setImageDescriptor(Activator
* .imageDescriptorFromPlugin( Activator.PLUGIN_ID,
* "/icons/locale.png")); }
*
* public void run() { addView(false); }
*
* });
*/
return tm.createControl(conComposite);
}
});
viewHolder.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
CTabItem selection = viewHolder.getSelection();
// BaseDataFacade bf = (BaseDataFacade) selection.getData();
BlobStoreDataFacade bf = (BlobStoreDataFacade) selection
.getData();
try {
bf.setLimit(Integer.parseInt(limit));
} catch (NumberFormatException e1) {
bf.setLimit(-1);
}
tableUi.setFacade(bf);
String text = bf.getStatus();
statLabel.setText(text);
status.layout(true);
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
status = new Composite(viewHolder, SWT.NONE);
GridLayout layout3 = new GridLayout();
layout3.marginHeight = 2;
status.setLayout(layout3);
statLabel = new Label(status, SWT.RIGHT);
statLabel.setText("Status");
statLabel.setLayoutData(GridDataFactory.fillDefaults()
.align(GridData.END, GridData.CENTER).grab(true, false)
.create());
statLabel.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_LIST_SELECTION));
viewHolder.setTopRight(status, SWT.FILL);
viewHolder.addCTabFolder2Listener(new CTabFolder2Listener() {
public void showList(CTabFolderEvent event) {
}
public void restore(CTabFolderEvent event) {
}
public void minimize(CTabFolderEvent event) {
}
public void maximize(CTabFolderEvent event) {
}
public void close(CTabFolderEvent event) {
CTabItem widget = (CTabItem) event.item;
widget.getControl().dispose();
if (viewHolder.getItemCount() == 1) {
pageBook.showPage(lm);
for (IContributionItem i : toolBarManager.getItems()) {
ActionContributionItem b = (ActionContributionItem) i;
b.getAction().setEnabled(false);
}
}
}
});
} finally {
creation = false;
}
}
protected void addView(boolean debug) {
if (!LicenseChecker.checkLicense(debug)) {
return;
}
if (project == null) {
IJavaProject javaGaeProject = UIUtils.getJavaGaeProject();
if (javaGaeProject != null) {
setProject(javaGaeProject);
} else {
return;
}
}
String appId = GaeBridge.getAppId(project.getProject());
if (appId == null || appId.trim().length() == 0) {
if (!debug) {
MessageDialog.openError(
Display.getCurrent().getActiveShell(),
"Application id is not specified",
"Application id is not specified for "
+ project.getElementName()
+ ".\n\nSpecify application id and try again");
return;
}
}
if (debug) {
CheckLaunchJob d = new CheckLaunchJob("Checking launch", project,
false);
d.schedule();
//int a = 0;
long l1 = System.currentTimeMillis();
long l2 = System.currentTimeMillis();
while (d.getResult() == null && (l2 - l1) <= 30000) {
Thread.yield();
Display.getCurrent().readAndDispatch();
l2 = System.currentTimeMillis();
//a++;
}
if (d.getPort() == -1) {
return;
}
}
final CTabItem cTabItem = new CTabItem(viewHolder, SWT.CLOSE);
cTabItem.setText("BlobStorage" + " (" + project.getElementName() + ")");
cTabItem.setShowClose(true);
Composite owner = new Composite(viewHolder, SWT.NONE);
owner.setLayout(new FillLayout());
for (IContributionItem i : toolBarManager.getItems()) {
if (i instanceof ActionContributionItem) {
ActionContributionItem b = (ActionContributionItem) i;
b.getAction().setEnabled(true);
}
}
BaseViewer bd = new BaseViewer(dAction, tableUi, project.getProject(),
"");
bd.createControl(owner);
final BlobStoreDataFacade facade = new BlobStoreDataFacade("", project,
isDebug(), bd.getRefreshCallback(), bd.getSingleCallback());
try {
int parseInt = Integer.parseInt(limit);
facade.setLimit(parseInt);
} catch (NumberFormatException e) {
}
facade.setStatusCallback(new IStatusCallback() {
public void statusChanged(final String newStatus) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
if (viewHolder.getSelection() == cTabItem) {
statLabel.setText(newStatus);
status.layout(true, true);
}
}
});
}
});
bd.setDataFacade(facade);
cTabItem.setData(facade);
cTabItem.setControl(owner);
cTabItem.setImage(debug ? DataViewPart.debug : production);
viewHolder.setSelection(cTabItem);
tableUi.setFacade(facade);
pageBook.showPage(viewHolder);
}
public void setProject(final IJavaProject project) {
this.project = project;
binding.setValue(project.getProject(), null);
}
}