blob: 4a6829d90dfd00a05227552208b00a11f3a278aa [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.sun.star.wizards.form;
import com.sun.star.awt.XWindowPeer;
import com.sun.star.beans.PropertyValue;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.sdb.application.DatabaseObject;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.common.JavaTools;
import com.sun.star.wizards.common.NoValidPathException;
import com.sun.star.wizards.common.Properties;
import com.sun.star.wizards.db.DatabaseObjectWizard;
import com.sun.star.wizards.db.RelationController;
import com.sun.star.wizards.document.OfficeDocument;
import com.sun.star.wizards.ui.CommandFieldSelection;
import com.sun.star.wizards.ui.UIConsts;
public class FormWizard extends DatabaseObjectWizard
{
private CommandFieldSelection curDBCommandFieldSelection;
private FormConfiguration curFormConfiguration;
private CommandFieldSelection curSubFormFieldSelection;
private FormDocument curFormDocument;
private FieldLinker curFieldLinker;
private UIControlArranger curControlArranger;
private DataEntrySetter CurDataEntrySetter;
private StyleApplier curStyleApplier;
private Finalizer curFinalizer;
private static String slblFields;
private static String slblSelFields;
private String sShowBinaryFields = PropertyNames.EMPTY_STRING;
private String serrFormNameexists = PropertyNames.EMPTY_STRING;
public static final int SOMAIN_PAGE = 1;
public static final int SOSUBFORM_PAGE = 2;
public static final int SOSUBFORMFIELDS_PAGE = 3;
public static final int SOFIELDLINKER_PAGE = 4;
public static final int SOCONTROL_PAGE = 5;
public static final int SODATA_PAGE = 6;
public static final int SOSTYLE_PAGE = 7;
public static final int SOSTORE_PAGE = 8;
public static final int COLUMNAR_LEFT = 1;
public static final int COLUMNAR_TOP = 2;
public static final int AS_GRID = 3;
public static final int IN_BLOCK_TOP = 4;
private String slblTables;
private boolean m_openForEditing;
private boolean m_success = false;
private String FormName;
public FormWizard(XMultiServiceFactory i_servicFactory, final PropertyValue[] i_wizardContext)
{
super(i_servicFactory, 34400, i_wizardContext);
super.addResourceHandler("FormWizard", "dbw");
Helper.setUnoPropertyValues(xDialogModel,
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_MOVEABLE, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_TITLE, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
210, Boolean.TRUE, "DialogForm", 102, 41, 1, new Short((short) 0), m_oResource.getResText(UIConsts.RID_FORM), 310
});
drawNaviBar();
if (getFormResources())
{
setRightPaneHeaders(m_oResource, UIConsts.RID_FORM + 90, 8);
}
}
public static void main(String i_args[])
{
executeWizardFromCommandLine( i_args, FormWizard.class.getName() );
}
// @Override
protected void enterStep(int nOldStep, int nNewStep)
{
try
{
if ((nOldStep < SOCONTROL_PAGE) && (nNewStep >= SOCONTROL_PAGE))
{
curFormDocument.initialize(curDBCommandFieldSelection.isModified(), curFormConfiguration.hasSubForm(), curSubFormFieldSelection.isModified(), getBorderType());
curDBCommandFieldSelection.setModified(false);
curSubFormFieldSelection.setModified(false);
}
switch (nNewStep)
{
case SOMAIN_PAGE:
curDBCommandFieldSelection.setModified(false);
break;
case SOSUBFORM_PAGE:
{
final String sCommandName = curDBCommandFieldSelection.getSelectedCommandName();
RelationController oRelationController = new RelationController(curFormDocument.oMainFormDBMetaData, sCommandName);
curFormConfiguration.initialize(curSubFormFieldSelection, oRelationController);
}
break;
case SOSUBFORMFIELDS_PAGE:
{
String sPreSelectedTableName = curFormConfiguration.getreferencedTableName();
boolean bReadOnly = (sPreSelectedTableName.length() > 0);
if (sPreSelectedTableName.length() == 0)
{
final String sTableName = curSubFormFieldSelection.getSelectedCommandName();
String[] aFieldNames = curSubFormFieldSelection.getSelectedFieldNames();
curFormDocument.oSubFormDBMetaData.initializeFieldColumns(true, sTableName, aFieldNames);
}
else
{
curSubFormFieldSelection.preselectCommand(sPreSelectedTableName, bReadOnly);
}
}
break;
case SOFIELDLINKER_PAGE:
{
final String[] aMainFieldNames = curFormDocument.oMainFormDBMetaData.getFieldNames();
final String[] aSubFieldNames = curFormDocument.oSubFormDBMetaData.getFieldNames();
curFieldLinker.initialize(aMainFieldNames, aSubFieldNames, curFormDocument.LinkFieldNames);
}
break;
case SOCONTROL_PAGE:
curControlArranger.enableSubFormImageList(curFormConfiguration.hasSubForm());
break;
case SODATA_PAGE:
break;
case SOSTYLE_PAGE:
break;
case SOSTORE_PAGE:
{
String sTableName = this.curDBCommandFieldSelection.getSelectedCommandName();
this.curFinalizer.initialize(sTableName, curFormDocument);
}
break;
default:
break;
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
protected Short getBorderType()
{
return curStyleApplier.getBorderType();
}
// @Override
protected void leaveStep(int nOldStep, int nNewStep)
{
switch (nOldStep)
{
case SOMAIN_PAGE:
{
final String sTableName = curDBCommandFieldSelection.getSelectedCommandName();
final String[] aFieldNames = curDBCommandFieldSelection.getSelectedFieldNames();
curFormDocument.oMainFormDBMetaData.initializeFieldColumns(true, sTableName, aFieldNames);
final String[] aMainFieldNames = curFormDocument.oMainFormDBMetaData.getFieldNames();
try
{
curFormDocument.LinkFieldNames = JavaTools.removeOutdatedFields(curFormDocument.LinkFieldNames, aMainFieldNames, 1);
}
catch (java.lang.Exception e)
{
}
}
break;
case SOSUBFORM_PAGE:
break;
case SOSUBFORMFIELDS_PAGE:
{
final String sTableName = curSubFormFieldSelection.getSelectedCommandName();
final String[] aFieldNames = curSubFormFieldSelection.getSelectedFieldNames();
curFormDocument.oSubFormDBMetaData.initializeFieldColumns(true, sTableName, aFieldNames);
final String[] aSubFieldNames = curFormDocument.oSubFormDBMetaData.getFieldNames();
try
{
curFormDocument.LinkFieldNames = JavaTools.removeOutdatedFields(curFormDocument.LinkFieldNames, aSubFieldNames, 0);
}
catch (java.lang.Exception e)
{
}
}
break;
case SOFIELDLINKER_PAGE:
curFormDocument.LinkFieldNames = curFieldLinker.getLinkFieldNames();
break;
case SOCONTROL_PAGE:
break;
case SODATA_PAGE:
break;
case SOSTYLE_PAGE:
break;
case SOSTORE_PAGE:
break;
default:
break;
}
}
public void buildSteps() throws NoValidPathException
{
curDBCommandFieldSelection = new CommandFieldSelection(this, curFormDocument.oMainFormDBMetaData, 92, slblFields, slblSelFields, slblTables, true, 34411);
curDBCommandFieldSelection.addFieldSelectionListener(new FieldSelectionListener());
curFormDocument.xProgressBar.setValue(20);
// Label Help Text
insertLabel("lblBinaryHelpText",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
28, sShowBinaryFields, Boolean.TRUE, 95, 154, new Integer(SOMAIN_PAGE), 210
});
curFormConfiguration = new FormConfiguration(this);
curFormDocument.xProgressBar.setValue(30);
curSubFormFieldSelection = new CommandFieldSelection(this, curFormDocument.oSubFormDBMetaData, SOSUBFORMFIELDS_PAGE, 92, slblFields, slblSelFields, slblTables, true, 34431);
curSubFormFieldSelection.addFieldSelectionListener(new FieldSelectionListener());
insertLabel("lblSubFormBinaryHelpText",
new String[]
{
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
28, sShowBinaryFields, Boolean.TRUE, 95, 154, new Integer(SOSUBFORMFIELDS_PAGE), 210
});
curFormDocument.xProgressBar.setValue(40);
curFieldLinker = new FieldLinker(this, SOFIELDLINKER_PAGE, 95, 30, 210, 34441);
curFormDocument.xProgressBar.setValue(50);
curControlArranger = new UIControlArranger(this, curFormDocument);
curFormDocument.addUIFormController(curControlArranger);
curFormDocument.xProgressBar.setValue(60);
CurDataEntrySetter = new DataEntrySetter(this);
curFormDocument.xProgressBar.setValue(70);
curStyleApplier = new StyleApplier(this, curFormDocument);
curFormDocument.addStyleApplier(curStyleApplier);
curFormDocument.xProgressBar.setValue(80);
curFinalizer = new Finalizer(this);
curFormDocument.xProgressBar.setValue(100);
enableNavigationButtons(false, false, false);
curFormDocument.xProgressBar.end();
}
// @Override
public boolean finishWizard()
{
int ncurStep = getCurrentStep();
if ((switchToStep(ncurStep, SOSTORE_PAGE)) || (ncurStep == SOSTORE_PAGE))
{
this.curFinalizer.initialize(curDBCommandFieldSelection.getSelectedCommandName(), this.curFormDocument);
String sNewFormName = curFinalizer.getName();
if (!curFormDocument.oMainFormDBMetaData.hasFormDocumentByName(sNewFormName))
{
m_openForEditing = curFinalizer.getOpenForEditing();
FormName = curFinalizer.getName();
if (curFormDocument.finalizeForms(CurDataEntrySetter, curFieldLinker, curFormConfiguration))
{
if (curFinalizer.finish())
{
m_success = true;
xDialog.endExecute();
return true;
}
}
}
else
{
String smessage = JavaTools.replaceSubString(serrFormNameexists, sNewFormName, "%FORMNAME");
showMessageBox("WarningBox", com.sun.star.awt.VclWindowPeerAttribute.OK, smessage);
}
}
return false;
}
// @Override
public void cancelWizard()
{
m_success = false;
xDialog.endExecute();
}
public void insertFormRelatedSteps()
{
addRoadmap();
int i = 0;
i = insertRoadmapItem(0, true, m_oResource.getResText(UIConsts.RID_FORM + 80), SOMAIN_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 81), SOSUBFORM_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 82), SOSUBFORMFIELDS_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 83), SOFIELDLINKER_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 84), SOCONTROL_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 85), SODATA_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 86), SOSTYLE_PAGE);
i = insertRoadmapItem(i, false, m_oResource.getResText(UIConsts.RID_FORM + 87), SOSTORE_PAGE);
setRoadmapInteractive(true);
setRoadmapComplete(true);
setCurrentRoadmapItemID((short) 1);
}
public void start()
{
try
{
curFormDocument = new FormDocument(xMSF);
if (curFormDocument.oMainFormDBMetaData.getConnection(m_wizardContext))
{
curFormDocument.oSubFormDBMetaData.getConnection(new PropertyValue[]
{
Properties.createProperty(PropertyNames.ACTIVE_CONNECTION, curFormDocument.oMainFormDBMetaData.DBConnection)
});
curFormDocument.xProgressBar.setValue(20);
buildSteps();
this.curDBCommandFieldSelection.preselectCommand(m_wizardContext, false);
XWindowPeer xWindowPeer2 = createWindowPeer(curFormDocument.xWindowPeer);
curFormDocument.oMainFormDBMetaData.setWindowPeer(xWindowPeer2);
insertFormRelatedSteps();
short dialogReturn = executeDialog(curFormDocument.xFrame);
xComponent.dispose();
if ((dialogReturn == 0) && m_success)
{
curFormDocument.oMainFormDBMetaData.addFormDocument(curFormDocument.xComponent);
loadSubComponent(DatabaseObject.FORM, FormName, m_openForEditing);
}
}
}
catch (java.lang.Exception jexception)
{
jexception.printStackTrace(System.out);
}
if ((!m_success) && (curFormDocument != null))
{
OfficeDocument.close(curFormDocument.xComponent);
}
}
private boolean getFormResources()
{
sShowBinaryFields = m_oResource.getResText(UIConsts.RID_FORM + 2);
slblTables = m_oResource.getResText(UIConsts.RID_FORM + 6);
slblFields = m_oResource.getResText(UIConsts.RID_FORM + 12);
slblSelFields = m_oResource.getResText(UIConsts.RID_FORM + 1);
serrFormNameexists = m_oResource.getResText(UIConsts.RID_FORM + 98);
return true;
}
public class FieldSelectionListener implements com.sun.star.wizards.ui.XFieldSelectionListener
{
protected int ID;
// @Override
public int getID()
{
return ID;
}
// @Override
public void setID(String sIncSuffix)
{
ID = 1;
if (sIncSuffix != null)
{
if ((!sIncSuffix.equals(PropertyNames.EMPTY_STRING)) && (!sIncSuffix.equals("_")))
{
String sID = JavaTools.ArrayoutofString(sIncSuffix, "_")[1];
ID = Integer.parseInt(sID);
int a = 0;
}
}
}
// @Override
public void shiftFromLeftToRight(String[] SelItems, String[] NewItems)
{
if (ID == 1)
{
toggleMainFormSteps();
}
else
{
toggleSubFormSteps();
}
}
// @Override
public void shiftFromRightToLeft(String[] SelItems, String[] NewItems)
{
// TODO When the ListFieldbox is refilled only fields of the current Command may be merged into the Listbox
if (ID == 1)
{
toggleMainFormSteps();
}
else
{
toggleSubFormSteps();
}
}
// @Override
public void moveItemDown(String item)
{
}
// @Override
public void moveItemUp(String item)
{
}
private boolean toggleSubFormSteps()
{
curSubFormFieldSelection.setModified(true);
boolean benable = curSubFormFieldSelection.getSelectedFieldNames().length > 0;
enablefromStep(SOFIELDLINKER_PAGE, benable);
if (benable)
{
curFieldLinker.enable(!curFormConfiguration.areexistingRelationsdefined());
}
return benable;
}
private void toggleMainFormSteps()
{
curDBCommandFieldSelection.setModified(true);
boolean enabled = curDBCommandFieldSelection.getSelectedFieldNames().length > 0;
enablefromStep(SOSUBFORM_PAGE, enabled);
setControlProperty("btnWizardNext", PropertyNames.PROPERTY_ENABLED, enabled);
if (enabled)
{
if (curFormConfiguration.hasSubForm())
{
enabled = toggleSubFormSteps();
}
else
{
setStepEnabled(SOSUBFORMFIELDS_PAGE, false);
setStepEnabled(SOFIELDLINKER_PAGE, false);
}
}
setControlProperty("btnWizardFinish", PropertyNames.PROPERTY_ENABLED, enabled);
}
}
}