/*
* � Copyright IBM Corp. 2015, 2016
*
* 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 com.ibm.xsp.extlib.designer.tooling.utils;
import org.eclipse.jface.dialogs.IDialogConstants;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Locale;
import java.util.Vector;
import lotus.domino.Database;
import lotus.domino.Form;
import lotus.domino.NotesException;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.ViewColumn;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.w3c.dom.Element;
import com.ibm.commons.swt.dialog.LWPDMessageDialog;
import com.ibm.commons.util.StringUtil;
import com.ibm.designer.domino.constants.XSPAttributeNames;
import com.ibm.designer.domino.ide.resources.dbproperties.XSPProperties;
import com.ibm.designer.domino.ide.resources.extensions.DesignerProject;
import com.ibm.designer.domino.ide.resources.project.IDominoDesignerProject;
import com.ibm.designer.domino.product.ProductUtil;
import com.ibm.designer.domino.ide.resources.extensions.NotesPlatform;
import com.ibm.designer.domino.xsp.api.util.XPagesDataUtil;
import com.ibm.designer.domino.xsp.dominoutils.DominoImportException;
import com.ibm.designer.domino.xsp.dominoutils.DominoUtil;
import com.ibm.designer.domino.xsp.utils.FormModelUtil;
import com.ibm.xsp.extlib.designer.tooling.constants.IExtLibAttrNames;
import com.ibm.xsp.library.StandardRegistryMaintainer;
import com.ibm.xsp.registry.FacesDefinition;
import com.ibm.xsp.registry.FacesRegistry;
import com.ibm.xsp.registry.RegistryUtil;
import com.ibm.xsp.extlib.designer.tooling.palette.singlepageapp.WizardSubPageDataSource.FormField;
/**
* @author Gary Marjoram
*
*/
public class WizardUtils {
//
// Utility function for creating a Button with a layout and a span
//
public static Button createButton(Composite parent, String text, SelectionListener listener, int layout, int span) {
Button btn = new Button(parent, SWT.NONE);
GridData gd = new GridData(layout);
gd.horizontalSpan = span;
btn.setLayoutData(gd);
btn.setText(text);
if (listener != null) {
btn.addSelectionListener(listener);
}
return btn;
}
//
// Utility function for creating a Button with a layout
//
public static Button createButton(Composite parent, String text, SelectionListener listener, int layout) {
Button btn = new Button(parent, SWT.NONE);
GridData gd = new GridData(layout);
btn.setLayoutData(gd);
btn.setText(text);
if (listener != null) {
btn.addSelectionListener(listener);
}
return btn;
}
//
// Utility function for creating a Button
//
public static Button createButton(Composite parent, String text, SelectionListener listener) {
Button btn = new Button(parent, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
btn.setLayoutData(gd);
btn.setText(text);
if (listener != null) {
btn.addSelectionListener(listener);
}
return btn;
}
//
// Utility function for creating a CheckBox with a span
//
public static Button createCheckBox(Composite parent, String text, int span, boolean select) {
Button btn = new Button(parent, SWT.CHECK);
btn.setText(" " + text);
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gridData.horizontalSpan = span;
btn.setLayoutData(gridData);
btn.setSelection(select);
return btn;
}
//
// Utility function for creating a CheckBox with an indent and a span
//
public static Button createCheckBox(Composite parent, String text, int span, boolean select, int indent) {
Button btn = createCheckBox(parent, text,span, select);
GridData gridData = (GridData) btn.getLayoutData();
gridData.horizontalIndent = indent;
return btn;
}
//
// Utility function for creating a CheckBox
//
public static Button createCheckBox(Composite parent, String text, int span, boolean select, int indent, boolean bold) {
Button btn = createCheckBox(parent, text,span, select, indent);
if (bold) {
btn.setFont(JFaceResources.getDialogFontDescriptor().withStyle(SWT.BOLD).createFont(null));
}
return btn;
}
//
// Utility function for creating a Radio Button with a span
//
public static Button createRadio(Composite parent, String text, int span, SelectionListener listener) {
Button btn = new Button(parent, SWT.RADIO);
btn.setText(" " + text);
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gridData.horizontalSpan = span;
btn.setLayoutData(gridData);
if (listener != null) {
btn.addSelectionListener(listener);
}
return btn;
}
//
// Utility function for creating a Radio Button with an indent and a span
//
public static Button createRadio(Composite parent, String text, int span, SelectionListener listener, int indent) {
Button btn = createRadio(parent, text, span, listener);
GridData gridData = (GridData) btn.getLayoutData();
gridData.horizontalIndent = indent;
return btn;
}
//
// Utility function for creating a Group with a title
//
public static Group createGroup(Composite parent, String label, int span, int cols) {
Group group = createGroup(parent, span, cols);
group.setText(label);
return group;
}
//
// Utility function for creating a Group with an indent and span
//
public static Group createGroup(Composite parent, int span, int cols, int indent) {
Group group = new Group(parent, SWT.NONE);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = span;
gridData.horizontalIndent = indent;
group.setLayoutData(gridData);
GridLayout layout = new GridLayout();
group.setLayout(layout);
layout.numColumns = cols;
return group;
}
//
// Utility function for creating a Group with a span
//
public static Group createGroup(Composite parent, int span, int cols) {
return createGroup(parent, span, cols, 0);
}
//
// Utility function for enabling/disabling the controls in a group based
// on the state of the first checkbox in the group - checked meaning enabled
//
public static void setCheckGroupEnabledState(Group group) {
boolean state = true;
Control ctls[] = group.getChildren();
if ((ctls != null) && (ctls.length > 0)) {
if(ctls[0] instanceof Button) {
ctls[0].setEnabled(group.isEnabled());
state = ctls[0].isEnabled() ? ((Button)ctls[0]).getSelection() : false;
}
for(int i=1; i < ctls.length; i++) {
ctls[i].setEnabled(state);
if(ctls[i] instanceof Group) {
setCheckGroupEnabledState((Group) ctls[i]);
}
}
}
}
//
// Utility function for enabling/disabling the controls in a Group
//
public static void setGroupEnabledState(Group parent, boolean state) {
Control ctls[] = parent.getChildren();
if (ctls != null) {
for(int i=0; i < ctls.length; i++) {
ctls[i].setEnabled(state);
if(ctls[i] instanceof Group) {
setGroupEnabledState((Group)ctls[i], state);
}
}
}
}
//
// Utility function for creating a Label with a span
//
public static Label createLabel(Composite parent, String text, int span) {
return createLabel(parent, text, span, SWT.NONE);
}
//
// Utility function for creating a Label with a span and style
//
public static Label createLabel(Composite parent, String text, int span, int style) {
return createLabel(parent, text, span, style, GridData.HORIZONTAL_ALIGN_FILL);
}
//
// Utility function for creating a Label
//
public static Label createLabel(Composite parent, String text, int span, int style, int fill) {
Label label = new Label(parent, style);
label.setText(text);
GridData gridData = new GridData(fill);
gridData.horizontalSpan = span;
label.setLayoutData(gridData);
return label;
}
//
// Utility function for creating a Label with an indent and bold option
//
public static Label createLabel(Composite parent, String text, int span, int indent, boolean bold, int fill) {
Label label = createLabel(parent, text, span, SWT.NONE, fill);
if (bold) {
label.setFont(JFaceResources.getDialogFontDescriptor().withStyle(SWT.BOLD).createFont(null));
}
GridData gridData = (GridData) label.getLayoutData();
gridData.horizontalIndent = indent;
return label;
}
//
// Utility function for creating a Read Only Combo
//
public static Combo createCombo(Composite parent, int span, SelectionListener listener) {
Combo combo = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = span;
combo.setLayoutData(gd);
combo.setVisibleItemCount(10);
if (listener != null) {
combo.addSelectionListener(listener);
}
return combo;
}
//
// Utility function for creating an Editable Combo
//
public static Combo createEditCombo(Composite parent, int span, SelectionListener listener) {
Combo combo = new Combo(parent, SWT.BORDER);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = span;
combo.setLayoutData(gd);
combo.setVisibleItemCount(10);
if (listener != null) {
combo.addSelectionListener(listener);
}
return combo;
}
//
// Utility function for creating a read only Combo with items
//
public static Combo createCombo(Composite parent, int span, String[] items, int index, SelectionListener listener) {
Combo combo = createCombo(parent, span, listener);
combo.setItems(items);
combo.select(index);
return combo;
}
//
// Utility function for creating a editable Combo with items
//
public static Combo createEditCombo(Composite parent, int span, String[] items, int index, SelectionListener listener) {
Combo combo = createEditCombo(parent, span, listener);
combo.setItems(items);
combo.select(index);
return combo;
}
//
// Utility function for creating a Text
//
public static Text createText(Composite parent) {
Text text = new Text(parent, SWT.BORDER | SWT.SINGLE);
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
return text;
}
//
// Utility function for creating a Text with a span
//
public static Text createText(Composite parent, int span) {
return createText(parent, span, 0);
}
//
// Utility function for creating a Text with a span, indent and fill
//
public static Text createText(Composite parent, int style, int span, int indent, int fill) {
Text text = new Text(parent, style);
GridData gd = new GridData(fill);
gd.horizontalSpan = span;
gd.horizontalIndent = indent;
text.setLayoutData(gd);
return text;
}
//
// Utility function for creating a Text with a span and indent
//
public static Text createText(Composite parent, int span, int indent) {
Text text = new Text(parent, SWT.BORDER | SWT.SINGLE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = span;
gd.horizontalIndent = indent;
text.setLayoutData(gd);
return text;
}
//
// Utility function for creating a Password Text with a span
//
public static Text createPasswordText(Composite parent, int span) {
Text text = new Text(parent, SWT.PASSWORD | SWT.BORDER | SWT.SINGLE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = span;
text.setLayoutData(gd);
return text;
}
//
// Utility function for creating a Text with initial value
//
public static Text createText(Composite parent, String txt) {
Text text = createText(parent);
text.setText(txt);
return text;
}
//
// Utility function for creating a Editable / Non Editable Text
//
public static Text createText(Composite parent, boolean editable) {
Text text = createText(parent);
text.setEditable(editable);
return text;
}
//
// Utility function for creating a Spinner
//
public static Spinner createSpinner(Composite parent, int min, int max) {
Spinner spinner = new Spinner(parent, SWT.BORDER);
spinner.setMinimum(min);
spinner.setMaximum(max);
return spinner;
}
//
// Utility function for creating a TableViewer with columns
//
public static TableViewer createTableViewer(Composite parent, int span, int cols, int[] weights) {
return createTableViewer(parent, span, cols, weights, SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
}
//
// Utility function for creating a TableViewer with columns and options
//
public static TableViewer createTableViewer(Composite parent, int span, int cols, int[] weights, int options) {
return createTableViewer(parent, span, cols, weights, options, 0);
}
//
// Utility function for creating a TableViewer with columns and indent
//
public static TableViewer createTableViewer(Composite parent, int span, int cols, int[] weights, int options, int indent) {
TableViewer table = new TableViewer(parent, options);
GridData gd = new GridData(SWT.DEFAULT);
gd.horizontalSpan = span;
gd.verticalAlignment = GridData.FILL;
gd.grabExcessVerticalSpace = true;
gd.horizontalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
gd.horizontalIndent = indent;
table.getTable().setLayoutData(gd);
table.getTable().setHeaderVisible(true);
table.getTable().setLinesVisible(true);
TableLayout tl = new TableLayout();
for (int i=0; i<cols; i++) {
if (weights != null) {
tl.addColumnData(new ColumnWeightData(weights[i], false));
} else {
tl.addColumnData(new ColumnWeightData(100, false));
}
}
table.getTable().setLayout(tl);
return table;
}
//
// Utility function for creating a TableViewer with columns and a checkbox
//
public static TableViewer createCheckboxTableViewer(Composite parent, int cols) {
TableViewer table = new TableViewer(parent, SWT.CHECK | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
GridData gd = new GridData(SWT.DEFAULT);
gd.horizontalSpan = 1;
gd.verticalAlignment = GridData.FILL;
gd.grabExcessVerticalSpace = true;
gd.horizontalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
table.getTable().setLayoutData(gd);
table.getTable().setHeaderVisible(true);
table.getTable().setLinesVisible(true);
TableLayout tl = new TableLayout();
for (int i=0; i<cols; i++) {
tl.addColumnData(new ColumnWeightData(100, false));
}
table.getTable().setLayout(tl);
return table;
}
//
// Utility function for creating a GridLayout
//
public static GridLayout createGridLayout(int cols, int margin) {
GridLayout layout = new GridLayout();
layout.numColumns = cols;
layout.marginLeft = margin;
layout.marginRight = margin;
layout.marginTop = margin;
layout.marginBottom = margin;
return layout;
}
//
// Returns the name of the current XPage we're editing
//
public static String getXPageFileName() {
IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
if (page != null) {
IEditorPart editor = page.getActiveEditor();
if (editor != null) {
IEditorInput input = editor.getEditorInput();
if (input instanceof IFileEditorInput) {
return ((IFileEditorInput) input).getFile().getLocation().lastSegment();
}
}
}
return null;
}
//
// Utility function for setting moveTo attributes
//
public static void setXspMoveToAttrs(Element element, String direction, String transition, String fullRefresh, String targetPage, String saveDoc) {
FormModelUtil.setAttribute(element, IExtLibAttrNames.EXT_LIB_ATTR_DIRECTION, direction);
FormModelUtil.setAttribute(element, IExtLibAttrNames.EXT_LIB_ATTR_TRANSITION_TYPE, transition);
FormModelUtil.setAttribute(element, IExtLibAttrNames.EXT_LIB_ATTR_FORCE_FULL_REFRESH, fullRefresh);
FormModelUtil.setAttribute(element, IExtLibAttrNames.EXT_LIB_ATTR_TARGET_PAGE, targetPage);
FormModelUtil.setAttribute(element, IExtLibAttrNames.EXT_LIB_ATTR_SAVE_DOCUMENT, saveDoc);
}
//
// Utility function for setting eventHandler attributes
//
public static void setXspEventHandlerAttrs(Element element, String event, String submit, String refreshMode) {
FormModelUtil.setAttribute(element, XSPAttributeNames.XSP_ATTR_EVENT, event);
FormModelUtil.setAttribute(element, XSPAttributeNames.XSP_ATTR_SUBMIT, submit);
FormModelUtil.setAttribute(element, XSPAttributeNames.XSP_ATTR_REFRESH_MODE, refreshMode);
}
//
// Utility function to display a warning dialog with a continue option
//
public static boolean displayContinueDialog(Shell shell, String title, String msg) {
MessageDialog dialog = new MessageDialog(shell, title, null,
msg, MessageDialog.WARNING, new String[] {"Continue", "Cancel"}, 0); // $NLX-WizardUtils.Continue-1$ $NLX-WizardUtils.Cancel-2$
return(dialog.open() == 0);
}
//
// Utility function to read the value from a text box
//
public static String getTextValue(final Text txt, final String defVal) {
if ((txt == null) || (txt.isDisposed())) {
return defVal;
}
return (txt.getText());
}
//
// Utility function to read the value from a checkbox box
//
public static boolean getCheckBoxValue(final Button chk, final boolean defVal) {
if ((chk == null) || (chk.isDisposed())) {
return defVal;
}
return (chk.getSelection());
}
//
// Utility function to read the selection index from a combo
//
public static int getComboIndex(final Combo combo, final int defVal) {
if ((combo == null) || (combo.isDisposed())) {
return defVal;
}
return (combo.getSelectionIndex());
}
//
// Utility function to read the text from a combo
//
public static String getComboText(final Combo combo, final String defVal) {
if ((combo == null) || (combo.isDisposed())) {
return defVal;
}
return (combo.getText());
}
//
// Checks if a dependency is needed for a uri/tagName and adds
// the dependency if needed and the user grants permission
//
public static boolean findStandardDefAndAddDependency(final String uri, final String tagName, final DesignerProject project, final String errorMsg, final String proceedMsg) {
FacesDefinition def = null;
FacesRegistry localReg = project.getFacesRegistry();
if (localReg != null) {
def = localReg.findDef(uri, tagName);
if (def != null) {
return true;
}
}
FacesRegistry globalReg = StandardRegistryMaintainer.getStandardRegistry();
if (globalReg != null) {
def = globalReg.findDef(uri, tagName);
if (def != null) {
if (ExtLibToolingUtil.isPropertiesOpenInEditor(project)) {
LWPDMessageDialog msg = new LWPDMessageDialog(null, ProductUtil.getProductName(), null, errorMsg,
LWPDMessageDialog.WARNING, new String[] { IDialogConstants.CLOSE_LABEL }, 0);
msg.open();
return false;
}
String id = RegistryUtil.getProject(def).getId();
if(!StringUtil.equals("com.ibm.xsp.extlib.library", id)){ // $NON-NLS-1$
LWPDMessageDialog msg = new LWPDMessageDialog(null, ProductUtil.getProductName(), null, proceedMsg,
LWPDMessageDialog.INFORMATION, new String[] { IDialogConstants.PROCEED_LABEL, IDialogConstants.CANCEL_LABEL }, 0);
if (msg.open() != LWPDMessageDialog.OK) {
return false;
}
}
// third party lib - need to update the current db to depend on this lib!!
XSPProperties props = new XSPProperties((IDominoDesignerProject) project);
props.appendDependencies(id);
props.save();
}
}
return true;
}
//
// Helper function to get View Columns
//
public static String[][] getViewColumns(final String server,
final String database, final String viewName,
final boolean sortableOnly, final boolean visibleOnly) throws DominoImportException {
if (server == null || database == null || viewName == null) {
return null;
}
final ArrayList<String> columnNames = new ArrayList<String>();
final ArrayList<String> columnTitles = new ArrayList<String>();
final DominoImportException[] die = new DominoImportException[1];
try {
NotesPlatform.getInstance().syncExec(new Runnable() {
public void run() {
if(StringUtil.isNotEmpty(database)){
if(StringUtil.isEmpty(database.trim())){
return;
}
if(database.length() == 1 && Character.isSpaceChar(database.charAt(0))){
return;
}
}
Database db = null;
try {
Session sess = NotesPlatform.getInstance().getSession();
db = sess.getDatabase(XPagesDataUtil.getServerName(server), database);
if (!db.isOpen()) {
try{
db.open();
}catch(NotesException ne){
if(StringUtil.equals(DominoUtil.LOCAL_CLIENT, server)){
die[0] = new DominoImportException(ne, "Unable to find Views in the database: " // $NLE-WizardSubPageDataSource.UnabletofindViewsinthedatabase-1$
+ database);
}else{
//there is a possibility that the db is on the local machine
db = sess.getDatabase(XPagesDataUtil.getServerName(DominoUtil.LOCAL_CLIENT), database);
if(!db.isOpen()){
db.open();
}
}
}
}
// at this level (API) we don't have ability to pull
// in the design elements
// cleanly. So for now, we'll pull in what we can
// directly - forms, views
// Creating a NoteCollection would find all the
// elements we want, but not with
// info we need.
//
Vector<?> vel = db.getViews();
Iterator<?> it = vel.iterator();
while (it.hasNext()) {
View vu = (View) it.next();
String name = null;
Vector<?> v = vu.getAliases();
int size = v.size();
if (size > 0) {
name = (String) v.get(size - 1);
} else {
name = vu.getName();
}
if (viewName.equals(name)) {
int columnSize = vu.getColumnCount();
// Checking autoGen columns
for (int col = 1; col <= columnSize; col++) {
ViewColumn viewCol = vu.getColumn(col);
boolean shouldViewColBeAdded = XPagesDataUtil.getViewColAddStatus(viewCol);
if(sortableOnly && shouldViewColBeAdded){
boolean sortable = viewCol.isResortAscending();
if(!sortable){
sortable = viewCol.isResortDescending();
}
shouldViewColBeAdded = sortable;
}
if (visibleOnly && shouldViewColBeAdded) {
shouldViewColBeAdded = !viewCol.isHidden();
}
if (shouldViewColBeAdded) {
String colTitle = StringUtil.getNonNullString(viewCol.getTitle());
String colName = StringUtil.getNonNullString(viewCol.getItemName());
// GMAM9PBDPA - If there's no title use the name as the title
if (StringUtil.isNotEmpty(colTitle)) {
columnTitles.add(colTitle);
} else {
columnTitles.add(colName);
}
columnNames.add(colName);
}
viewCol.recycle();
}
vu.recycle();
break;
}
vu.recycle();
}
} catch (NotesException e) {
die[0] = new DominoImportException(e,
"Unable to find Views in the database: " // $NLE-WizardSubPageDataSource.UnabletofindViewsinthedatabase.1-1$
+ database);
} catch (Throwable e) {
die[0] = new DominoImportException(null,
"Notes client not found"); // $NLE-WizardSubPageDataSource.Notesclientnotfound.2-1$
}
finally{
if(db != null){
try {
db.recycle();
} catch (NotesException e) {
e.printStackTrace();
}
}
}
}
});
} catch (Throwable e) {
die[0] = new DominoImportException(null,
"Notes client not found"); // $NLE-WizardSubPageDataSource.Notesclientnotfound.3-1$
}
if (die[0] != null) {
throw die[0];
}
String[][] ret = new String[2][];
ret[0] = columnNames.toArray(new String[0]);
ret[1] = columnTitles.toArray(new String[0]);
return ret;
}
//
// Helper function to get Form Fields
//
public static ArrayList<FormField> getFormFields(final String server, final String database, final String formName) throws DominoImportException {
if (server == null || database == null || formName == null) {
return null;
}
final ArrayList<FormField> fields = new ArrayList<FormField>();
final DominoImportException[] die = new DominoImportException[1];
try {
NotesPlatform.getInstance().syncExec(new Runnable() {
public void run() {
if (StringUtil.isNotEmpty(database)) {
if (StringUtil.isEmpty(database.trim())) {
return;
}
if (database.length() == 1 && Character.isSpaceChar(database.charAt(0))) {
return;
}
}
Database db = null;
try {
Session sess = NotesPlatform.getInstance().getSession();
db = sess.getDatabase(XPagesDataUtil.getServerName(server), database);
if (!db.isOpen()) {
try {
db.open();
} catch (NotesException ne) {
if (StringUtil.equals(DominoUtil.LOCAL_CLIENT, server)) {
die[0] = new DominoImportException(ne, "Unable to find Forms in the database: " // $NLE-WizardSubPageDataSource.UnabletofindFormsinthedatabase-1$
+ database);
}
else {
// there is a possibility that the db is on the local machine
db = sess.getDatabase(XPagesDataUtil.getServerName(DominoUtil.LOCAL_CLIENT), database);
if (!db.isOpen()) {
db.open();
}
}
}
}
// at this level (API) we don't have ability to pull
// in the design elements
// cleanly. So for now, we'll pull in what we can
// directly - forms, views
// Creating a NoteCollection would find all the
// elements we want, but not with
// info we need.
//
Vector<?> vel = db.getForms();
Iterator<?> it = vel.iterator();
while (it.hasNext()) {
Form frm = (Form) it.next();
String name = null;
Vector<?> v = frm.getAliases();
int size = v.size();
if (size > 0) {
name = (String) v.get(size - 1);
}
else {
name = frm.getName();
}
if (formName.equals(name)) {
Vector<?> fldVel = frm.getFields();
Iterator<?> fldIt = fldVel.iterator();
while (fldIt.hasNext()) {
String fieldName = (String) fldIt.next();
int type = frm.getFieldType(fieldName);
FormField frmFld = new FormField(fieldName, type);
if (frmFld.control != FormField.NOT_SUPPORTED) {
fields.add(0, frmFld);
}
}
frm.recycle();
break;
}
frm.recycle();
}
} catch (NotesException e) {
die[0] = new DominoImportException(e, "Unable to find Forms in the database: " // $NLE-WizardSubPageDataSource.UnabletofindFormsinthedatabase.1-1$
+ database);
} catch (Throwable e) {
die[0] = new DominoImportException(null, "Notes client not found"); // $NLE-WizardSubPageDataSource.Notesclientnotfound-1$
} finally {
if (db != null) {
try {
db.recycle();
} catch (NotesException e) {
e.printStackTrace();
}
}
}
}
});
} catch (Throwable e) {
die[0] = new DominoImportException(null, "Notes client not found"); // $NLE-WizardSubPageDataSource.Notesclientnotfound.1-1$
}
if (die[0] != null) {
throw die[0];
}
return fields;
}
//
// Utility function for setting an attribute on an element
//
public static void setAttributeIfNotEmpty(Element el, String attr, String val) {
if (StringUtil.isNotEmpty(val)) {
el.setAttribute(attr, val);
}
}
//
// Utility function for setting the text in a Text control
//
public static void safeSetText(Text control, String text) {
if (StringUtil.isNotEmpty(text)) {
control.setText(text);
} else {
control.setText("");
}
}
//
// Utility function for setting a selection in a radio / checkbox
//
public static void safeSetSelection(Button control, Boolean value) {
if (value != null) {
control.setSelection(value);
} else {
control.setSelection(false);
}
}
//
// Utility function for setting span
//
public static void setSpan(Control control, int span) {
((GridData)(control).getLayoutData()).horizontalSpan = span;
}
//
// Utility function for setting indent
//
public static void setIndent(Control control, int indent) {
((GridData)(control).getLayoutData()).horizontalIndent = indent;
}
//
// Utility function for setting indent
//
public static void setVerticalIndent(Control control, int indent) {
((GridData)(control).getLayoutData()).verticalIndent = indent;
}
//
// Make the first letter of a String a capital
//
public static String capitalizeFirstLetter(String str) {
if (str == null || str.length() == 0) {
return str;
}
return str.substring(0, 1).toUpperCase(Locale.getDefault()) + str.substring(1);
}
}