Skip to content
Snippets Groups Projects
Commit cd9d483e authored by ribeaudc's avatar ribeaudc
Browse files

[LMS-644] add: - Not functional GUI part.

SVN: 9168
parent 43e26767
No related branches found
No related tags found
No related merge requests found
Showing
with 294 additions and 33 deletions
......@@ -19,10 +19,17 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application;
import com.google.gwt.core.client.GWT;
/**
* Some generic constants.
*
* @author Franz-Josef Elmer
*/
public class GenericConstants
public final class GenericConstants
{
private GenericConstants()
{
// Can not be instantiated.
}
/**
* Prefix all widget IDs have to start with.
*/
......
......@@ -35,7 +35,12 @@ public interface ISampleViewClientPlugin
public ITabItem createSampleViewer(final String sampleIdentifier);
/**
* Shows a registration form for samples of type <var>sampleTypeCode</var>.
* Shows a registration form for samples of given <var>sampleType</var>.
*/
public Widget createRegistrationClientForSampleType(SampleType sampleTypeCode);
public Widget createRegistrationForSampleType(final SampleType sampleType);
/**
* Shows a batch registration form for samples of given <var>sampleType</var>.
*/
public Widget createBatchRegistrationForSampleType(final SampleType sampleType);
}
......@@ -20,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonView
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GroupsView;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.PersonsView;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.RolesView;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SampleBatchRegistrationMock;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SampleBatchRegistrationPanel;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SampleRegistrationPanel;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment_browser.ExperimentBrowser;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample_browser.SampleBrowser;
......@@ -47,7 +47,7 @@ final class ComponentProvider
private final SampleRegistrationPanel sampleRegistration;
private final SampleBatchRegistrationMock sampleBatchRegistration;
private final SampleBatchRegistrationPanel sampleBatchRegistration;
private final ExperimentBrowser experimentBrowser;
......@@ -59,7 +59,7 @@ final class ComponentProvider
rolesView = new RolesView(viewContext);
personsView = new PersonsView(viewContext);
sampleRegistration = new SampleRegistrationPanel(viewContext);
sampleBatchRegistration = new SampleBatchRegistrationMock(viewContext);
sampleBatchRegistration = new SampleBatchRegistrationPanel(viewContext);
experimentBrowser = new ExperimentBrowser(viewContext);
}
......@@ -90,12 +90,12 @@ final class ComponentProvider
public final ITabItem getSampleRegistration()
{
return new ContentPanelAdapter(sampleRegistration);
return new DefaultTabItem("Sample registration", sampleRegistration);
}
public ITabItem getSampleBatchRegistration()
public final ITabItem getSampleBatchRegistration()
{
return new ContentPanelAdapter(sampleBatchRegistration);
return new DefaultTabItem("Sample batch registration", sampleBatchRegistration);
}
public ITabItem getExperimentBrowser()
......
......@@ -22,6 +22,8 @@ import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Header;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
/**
* A {@link ITabItem} implementation to adapt a {@link ContentPanel}.
*
......@@ -41,6 +43,9 @@ public final class ContentPanelAdapter implements ITabItem
public ContentPanelAdapter(final ContentPanel contentPanel,
final Listener<TabPanelEvent> tabPanelEventListener)
{
// Note that if not set, is then automatically generated. So this is why we test for
// 'ID_PREFIX'. We want the user to set an unique id.
assert contentPanel.getId().startsWith(GenericConstants.ID_PREFIX) : "Unspecified component id.";
this.contentPanel = contentPanel;
this.tabPanelEventListener = tabPanelEventListener;
}
......
......@@ -16,125 +16,68 @@
package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FileUpload;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample_browser.SampleTypeSelectionWidget;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleType;
/**
* @author Izabela Adamczyk
* The {@link LayoutContainer} extension for batch registering a sample.
*
* @author Christian Ribeaud
*/
public class SampleBatchRegistrationMock extends ContentPanel
public final class SampleBatchRegistrationPanel extends LayoutContainer
{
private static final String ID = "sample-batch-registration";
private final SampleTypeSelectionWidget sampleTypeSelection;
public SampleBatchRegistrationMock(final CommonViewContext viewContext)
public SampleBatchRegistrationPanel(final CommonViewContext viewContext)
{
setHeading("Sample batch registration mock");
setBodyBorder(false);
sampleTypeSelection =
new SampleTypeSelectionWidget(viewContext, true, "sample-batch-registration");
setId(GenericConstants.ID_PREFIX + ID);
setScrollMode(Scroll.AUTO);
sampleTypeSelection = new SampleTypeSelectionWidget(viewContext, true, ID);
final ToolBar toolBar = createToolBar();
add(toolBar);
sampleTypeSelection.addSelectionChangedListener(new SelectionChangedListener<ModelData>()
{
//
// SelectionChangedListener
//
@Override
public void selectionChanged(final SelectionChangedEvent<ModelData> se)
public final void selectionChanged(final SelectionChangedEvent<ModelData> se)
{
final SampleType selectedType = sampleTypeSelection.tryGetSelected();
if (selectedType != null)
final SampleType sampleType = sampleTypeSelection.tryGetSelected();
if (sampleType != null)
{
removeAll();
add(new SampleBatchRegistrationForm(viewContext, selectedType));
add(toolBar);
add(viewContext.getClientPluginFactoryProvider().getClientPluginFactory(
sampleType.getCode()).createViewClientForSampleType(
sampleType.getCode()).createBatchRegistrationForSampleType(
sampleType));
layout();
}
}
});
final ToolBar toolBar = new ToolBar();
toolBar.add(new LabelToolItem("Sample type:"));
toolBar.add(new AdapterToolItem(sampleTypeSelection));
setTopComponent(toolBar);
}
@Override
protected void onRender(final Element parent, final int pos)
{
super.onRender(parent, pos);
createUI();
}
void createUI()
private final ToolBar createToolBar()
{
}
static class SampleBatchRegistrationForm extends ContentPanel
{
SampleBatchRegistrationForm(final CommonViewContext viewContext, final SampleType sampleType)
{
setStyleAttribute("margin", "30");
setHeaderVisible(false);
setBodyBorder(false);
setButtonAlign(HorizontalAlignment.LEFT);
final ButtonBar bb = new ButtonBar();
bb.setCellSpacing(20);
bb.add(new Button("View & Register", new SelectionListener<ComponentEvent>()
{
@Override
public void componentSelected(final ComponentEvent ce)
{
MessageBox
.alert(
"Samples to be registered",
"List of samples which will be registered and REGISTER button (or parsing error message) will be shown.",
null);
}
}));
bb.add(new Button("Register", new SelectionListener<ComponentEvent>()
{
@Override
public void componentSelected(final ComponentEvent ce)
{
MessageBox.alert("Registration finished",
"List of registered samples is displayed or error message", null);
}
}));
setButtonBar(bb);
}
@Override
protected void onRender(final Element target, final int index)
{
super.onRender(target, index);
refresh();
}
public void refresh()
{
final FileUpload upload = new FileUpload();
add(upload);
}
final ToolBar toolBar = new ToolBar();
toolBar.add(new LabelToolItem("Sample type:"));
toolBar.add(new AdapterToolItem(sampleTypeSelection));
return toolBar;
}
}
......@@ -20,31 +20,30 @@ import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.user.client.Element;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample_browser.SampleTypeSelectionWidget;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleType;
/**
* The {@link LayoutContainer} extension for registering a sample.
*
* @author Izabela Adamczyk
*/
public class SampleRegistrationPanel extends ContentPanel
public final class SampleRegistrationPanel extends LayoutContainer
{
private final SampleTypeSelectionWidget sampleTypeSelection;
public static final String ID = "sample-registration";
public SampleRegistrationPanel(final CommonViewContext viewContext)
{
setHeading("Sample registration");
setHeaderVisible(false);
setBodyBorder(false);
setId(GenericConstants.ID_PREFIX + ID);
setScrollMode(Scroll.AUTO);
sampleTypeSelection = new SampleTypeSelectionWidget(viewContext, true, ID);
final ToolBar toolBar = new ToolBar();
......@@ -53,6 +52,11 @@ public class SampleRegistrationPanel extends ContentPanel
add(toolBar);
sampleTypeSelection.addSelectionChangedListener(new SelectionChangedListener<ModelData>()
{
//
// SelectionChangedListener
//
@Override
public void selectionChanged(final SelectionChangedEvent<ModelData> se)
{
......@@ -63,23 +67,11 @@ public class SampleRegistrationPanel extends ContentPanel
add(toolBar);
add(viewContext.getClientPluginFactoryProvider().getClientPluginFactory(
selectedType.getCode()).createViewClientForSampleType(
selectedType.getCode()).createRegistrationClientForSampleType(
selectedType.getCode()).createRegistrationForSampleType(
selectedType));
layout();
}
}
});
}
@Override
protected void onRender(final Element parent, final int pos)
{
super.onRender(parent, pos);
createUI();
}
void createUI()
{
}
}
......@@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleType;
import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleBatchRegistrationForm;
import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleRegistrationForm;
import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleViewer;
......@@ -107,9 +108,15 @@ public final class ClientPluginFactory extends
};
}
public Widget createRegistrationClientForSampleType(SampleType sampleType)
public final Widget createRegistrationForSampleType(final SampleType sampleType)
{
return new GenericSampleRegistrationForm(getViewContext(), sampleType);
}
public final Widget createBatchRegistrationForSampleType(final SampleType sampleType)
{
return new GenericSampleBatchRegistrationForm(getViewContext(), sampleType);
}
}
}
/*
* Copyright 2008 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FileUploadField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.FormPanel.Encoding;
import com.extjs.gxt.ui.client.widget.form.FormPanel.Method;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleType;
import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
/**
* The <i>generic</i> sample batch registration panel.
*
* @author Christian Ribeaud
*/
public final class GenericSampleBatchRegistrationForm extends LayoutContainer
{
private static final String FIELD_LABEL_TEMPLATE = "File {0}";
private static final String FIELD_NAME_TEMPLATE = "sample_batch_registration_{0}";
private static final int NUMBER_OF_FIELDS = 1;
private final IViewContext<IGenericClientServiceAsync> viewContext;
private final SampleType sampleType;
private FormPanel formPanel;
private Button submitButton;
public GenericSampleBatchRegistrationForm(
final IViewContext<IGenericClientServiceAsync> viewContext, final SampleType sampleType)
{
super(createLayout());
this.viewContext = viewContext;
this.sampleType = sampleType;
add(createUI());
}
private final static TableLayout createLayout()
{
final TableLayout tableLayout = new TableLayout();
tableLayout.setCellSpacing(10);
return tableLayout;
}
private final Component createUI()
{
submitButton = createButton();
formPanel = createFormPanel(submitButton);
final FieldSet fieldSet = createFieldSet();
for (int i = 0; i < NUMBER_OF_FIELDS; i++)
{
fieldSet.add(createFileUploadField(i));
}
formPanel.add(fieldSet);
return formPanel;
}
private final static FieldSet createFieldSet()
{
final FieldSet fieldSet = new FieldSet();
fieldSet.setHeading("Upload files");
fieldSet.setLayout(createFormLayout());
return fieldSet;
}
private final static FormLayout createFormLayout()
{
final FormLayout formLayout = new FormLayout();
formLayout.setLabelWidth(GenericSampleRegistrationForm.LABEL_WIDTH);
formLayout.setDefaultWidth(GenericSampleRegistrationForm.FIELD_WIDTH);
return formLayout;
}
private final static FormPanel createFormPanel(final Button button)
{
final FormPanel panel = new FormPanel();
panel.setLayout(new FlowLayout());
panel.setWidth(GenericSampleRegistrationForm.LABEL_WIDTH
+ GenericSampleRegistrationForm.FIELD_WIDTH + 50);
panel.setHeaderVisible(false);
panel.setBodyBorder(false);
panel.setAction(GenericConstants.createServicePath("upload"));
panel.setEncoding(Encoding.MULTIPART);
panel.setMethod(Method.POST);
panel.setButtonAlign(HorizontalAlignment.RIGHT);
panel.addButton(button);
return panel;
}
private final Button createButton()
{
final Button button =
new Button(viewContext.getMessageProvider().getMessage("button_submit"));
button.addSelectionListener(new SelectionListener<ButtonEvent>()
{
//
// SelectionListener
//
@Override
public final void componentSelected(final ButtonEvent ce)
{
if (formPanel.isValid())
{
submitButton.setEnabled(false);
formPanel.submit();
}
}
});
return button;
}
private final static FileUploadField createFileUploadField(final int counter)
{
final FileUploadField file = new FileUploadField();
file.setAllowBlank(counter > 0);
final int number = counter + 1;
file.setFieldLabel(Format.substitute(FIELD_LABEL_TEMPLATE, number));
file.setName(Format.substitute(FIELD_NAME_TEMPLATE, number));
return file;
}
}
......@@ -102,9 +102,9 @@ public final class GenericSampleRegistrationForm extends FormPanel
private static final String MANDATORY_LABEL_SEPARATOR = ": *";
private static final int LABEL_WIDTH = 150;
static final int LABEL_WIDTH = 100;
private static final int FIELD_WIDTH = 400;
static final int FIELD_WIDTH = 400;
public GenericSampleRegistrationForm(
final IViewContext<IGenericClientServiceAsync> viewContext, final SampleType sampleType)
......@@ -204,6 +204,7 @@ public final class GenericSampleRegistrationForm extends FormPanel
setButtonAlign(HorizontalAlignment.RIGHT);
final Button saveButton =
new Button(viewContext.getMessageProvider().getMessage("button_save"));
saveButton.setStyleAttribute("marginRight", "20px");
saveButton.setId(SAVE_BUTTON_ID);
saveButton.addSelectionListener(new SelectionListener<ComponentEvent>()
{
......
......@@ -110,7 +110,12 @@ public final class ClientPluginFactory extends
};
}
public Widget createRegistrationClientForSampleType(final SampleType sampleTypeCode)
public final Widget createRegistrationForSampleType(final SampleType sampleTypeCode)
{
return new DummyComponent();
}
public final Widget createBatchRegistrationForSampleType(SampleType sampleType)
{
return new DummyComponent();
}
......
......@@ -26,6 +26,7 @@ var common = {
//
button_save: "save",
button_submit: "submit",
//
// LoginWidget
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment