| /************************************************************** |
| * |
| * 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); |
| } |
| } |
| } |