[jboss-svn-commits] JBL Code SVN: r35474 - in labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor: client/factmodel and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 11 05:44:36 EDT 2010
Author: Rikkola
Date: 2010-10-11 05:44:34 -0400 (Mon, 11 Oct 2010)
New Revision: 35474
Added:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactEditorPopup.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.ui.xml
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.ui.xml
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.ui.xml
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.ui.xml
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldEditorPopup.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/ModelNameHelper.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/NoSpaceKeyPressHandler.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AbstractLazyStackPanelHeader.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AddButton.java
Removed:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelWidget.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/FormStylePopup.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/ImageButton.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactMetaModel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModels.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldMetaModel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelHeader.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelRow.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css
Log:
GUVNOR-641 : Replace gwtext accordion panels with custom component
-Declaritive Model editor
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/FormStylePopup.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/FormStylePopup.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/FormStylePopup.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -34,6 +34,9 @@
form = new FormStyleLayout( image,
title );
+ setModal( true );
+ setGlassEnabled( true );
+
setTitle( title );
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/ImageButton.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/ImageButton.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/ImageButton.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -1,5 +1,5 @@
-/**
- * Copyright 2010 JBoss Inc
+/*
+ * Copyright 2005 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,21 +16,6 @@
package org.drools.guvnor.client.common;
-/*
- * Copyright 2005 JBoss Inc
- *
- * 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.
- */
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiConstructor;
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactEditorPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactEditorPopup.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactEditorPopup.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.util.Format;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.TextBox;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactEditorPopup {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ private final FactMetaModel factModel;
+ private final ModelNameHelper modelNameHelper;
+
+ private Command okCommand;
+
+ public FactEditorPopup(ModelNameHelper modelNameHelper) {
+ this( new FactMetaModel(),
+ modelNameHelper );
+ }
+
+ public FactEditorPopup(FactMetaModel factModel,
+ ModelNameHelper modelNameHelper) {
+ this.factModel = factModel;
+ this.modelNameHelper = modelNameHelper;
+ }
+
+ public FactMetaModel getFactModel() {
+ return factModel;
+ }
+
+ public void setOkCommand(Command okCommand) {
+ this.okCommand = okCommand;
+ }
+
+ public void show() {
+
+ final FormStylePopup pop = new FormStylePopup();
+ pop.setTitle( constants.Name() );
+ HorizontalPanel changeName = new HorizontalPanel();
+ final TextBox name = new TextBox();
+ name.setText( factModel.name );
+ changeName.add( name );
+ Button nameButton = new Button( constants.OK() );
+
+ nameButton.addKeyPressHandler( new NoSpaceKeyPressHandler() );
+
+ nameButton.addClickHandler( new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ if ( doesTheNameExist() ) {
+ Window.alert( Format.format( constants.NameTakenForModel(),
+ name.getText() ) );
+ return;
+ }
+
+ if ( factModelAlreadyHasAName() ) {
+ if ( isTheUserSureHeWantsToChangeTheName() ) {
+ setNameAndClose();
+ }
+ } else {
+ setNameAndClose();
+ }
+ }
+
+ private boolean factModelAlreadyHasAName() {
+ return factModel.name != null;
+ }
+
+ private void setNameAndClose() {
+ String oldName = factModel.name;
+ String newName = name.getText();
+
+ modelNameHelper.changeNameInModelNameHelper( oldName,
+ newName );
+ factModel.name = newName;
+
+ okCommand.execute();
+
+ pop.hide();
+ }
+
+ private boolean isTheUserSureHeWantsToChangeTheName() {
+ return Window.confirm( constants.ModelNameChangeWarning() );
+ }
+
+ private boolean doesTheNameExist() {
+ return !modelNameHelper.isUniqueName( name.getText() );
+ }
+ } );
+ changeName.add( nameButton );
+ pop.addAttribute( constants.Name(),
+ changeName );
+
+ pop.show();
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import org.drools.guvnor.client.messages.Constants;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactFieldEditor extends Composite {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ interface FactFieldsEditorBinder
+ extends
+ UiBinder<Widget, FactFieldEditor> {
+ }
+
+ private static FactFieldsEditorBinder uiBinder = GWT.create( FactFieldsEditorBinder.class );
+
+ @UiField
+ Label fieldType;
+ @UiField
+ Label fieldName;
+ @UiField
+ Image editFieldIcon;
+ @UiField
+ Image deleteFieldIcon;
+
+ private FieldMetaModel field;
+ private final ModelNameHelper modelNameHelper;
+
+ private Command deleteCommand;
+
+ public FactFieldEditor(final FieldMetaModel field,
+ final ModelNameHelper modelNameHelper) {
+
+ this.field = field;
+ this.modelNameHelper = modelNameHelper;
+
+ initWidget( uiBinder.createAndBindUi( this ) );
+
+ fieldName.setStyleName( "guvnor-bold-label" );
+
+ setTypeText( field.type );
+ fieldName.setText( field.name );
+
+ editFieldIcon.setTitle( constants.Rename() );
+ deleteFieldIcon.setTitle( constants.Delete() );
+ }
+
+ @UiHandler("editFieldIcon")
+ void editFieldIconClick(ClickEvent event) {
+ final FieldEditorPopup popup = new FieldEditorPopup( field,
+ modelNameHelper );
+ popup.setOkCommand( new Command() {
+ public void execute() {
+ setTypeText( field.type );
+ fieldName.setText( field.name );
+ }
+ } );
+
+ popup.show();
+ }
+
+ @UiHandler("deleteFieldIcon")
+ void deleteFieldIconClick(ClickEvent event) {
+ deleteCommand.execute();
+ }
+
+ private void setTypeText(String typeName) {
+ String easierTypeNameForMostPeopleWhoAreNotProgrammers = modelNameHelper.getTypeDescriptions().get( typeName );
+
+ fieldType.setText( easierTypeNameForMostPeopleWhoAreNotProgrammers );
+ }
+
+ public void setDeleteCommand(Command deleteCommand) {
+ this.deleteCommand = deleteCommand;
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.ui.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.ui.xml (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldEditor.ui.xml 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,37 @@
+<!--
+ Copyright 2010 JBoss Inc
+
+ 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.
+ -->
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+ xmlns:gwt='urn:import:com.google.gwt.user.client.ui' xmlns:guvnor='urn:import:org.drools.guvnor.client.common'>
+
+ <gwt:HTMLPanel>
+ <div style="float:left; padding-left:40px;">
+ <gwt:HorizontalPanel>
+ <gwt:Label ui:field="fieldName"></gwt:Label>
+ <gwt:Label text=" : "></gwt:Label>
+ <gwt:Label ui:field="fieldType" ></gwt:Label>
+ </gwt:HorizontalPanel>
+ </div>
+ <div style="float:right;">
+ <gwt:HorizontalPanel>
+ <gwt:Image ui:field="editFieldIcon" url="images/edit.gif" ></gwt:Image>
+ <gwt:Image ui:field="deleteFieldIcon" url="images/delete_item_small.gif" ></gwt:Image>
+ </gwt:HorizontalPanel>
+ </div>
+ <div style="clear:both;"></div>
+ </gwt:HTMLPanel>
+
+</ui:UiBinder>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import java.util.List;
+
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.util.AddButton;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import org.drools.guvnor.client.util.Format;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactFieldsEditor extends Composite {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ interface FactFieldsEditorBinder
+ extends
+ UiBinder<Widget, FactFieldsEditor> {
+ }
+
+ private static FactFieldsEditorBinder uiBinder = GWT.create( FactFieldsEditorBinder.class );
+
+ @UiField
+ VerticalPanel fieldsPanel;
+ @UiField
+ AddButton addFieldIcon;
+
+ private final ModelNameHelper modelNameHelper;
+
+ private final List<FieldMetaModel> fields;
+
+ public FactFieldsEditor(final List<FieldMetaModel> fields,
+ final ModelNameHelper modelNameHelper) {
+
+ this.fields = fields;
+ this.modelNameHelper = modelNameHelper;
+
+ initWidget( uiBinder.createAndBindUi( this ) );
+
+ addFieldRows();
+
+ addFieldIcon.setTitle( constants.AddField() );
+ addFieldIcon.setText( constants.AddField() );
+ }
+
+ @UiHandler("addFieldIcon")
+ void addNewFieldClick(ClickEvent event) {
+ final FieldEditorPopup popup = new FieldEditorPopup( modelNameHelper );
+
+ popup.setOkCommand( new Command() {
+
+ public void execute() {
+ createNewField( popup );
+ }
+
+ private void createNewField(final FieldEditorPopup popup) {
+ FieldMetaModel field = popup.getField();
+ fields.add( field );
+ addFieldRow( field );
+ }
+ } );
+
+ popup.show();
+
+ }
+
+ private void addFieldRows() {
+ for ( FieldMetaModel fieldMetaModel : fields ) {
+ addFieldRow( fieldMetaModel );
+ }
+ }
+
+ private void addFieldRow(final FieldMetaModel fieldMetaModel) {
+ final FactFieldEditor editor = new FactFieldEditor( fieldMetaModel,
+ modelNameHelper );
+
+ editor.setDeleteCommand( new Command() {
+ public void execute() {
+ if ( Window.confirm( Format.format( constants.AreYouSureYouWantToRemoveTheField0(),
+ fieldMetaModel.name ) ) ) {
+ fieldsPanel.remove( editor );
+ fields.remove( fieldMetaModel );
+ }
+ }
+ } );
+
+ fieldsPanel.add( editor );
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.ui.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.ui.xml (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactFieldsEditor.ui.xml 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,33 @@
+<!--
+ Copyright 2010 JBoss Inc
+
+ 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.
+ -->
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+ xmlns:gwt='urn:import:com.google.gwt.user.client.ui' xmlns:guvnor='urn:import:org.drools.guvnor.client.util'>
+
+ <gwt:HTMLPanel>
+ <div style="background-color:#EBEBEB; border: 1px solid #BBBBBB;">
+ <div style="float:right;padding-right:20px;">
+ <guvnor:AddButton ui:field="addFieldIcon"></guvnor:AddButton>
+ </div>
+ <div style="clear:both;">
+ </div>
+ </div>
+ <div style="padding-left:40px;">
+ <gwt:VerticalPanel ui:field="fieldsPanel" ></gwt:VerticalPanel>
+ </div>
+ </gwt:HTMLPanel>
+
+</ui:UiBinder>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactMetaModel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactMetaModel.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactMetaModel.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,19 +26,27 @@
*
* @author Michael Neale
*/
-public class FactMetaModel implements PortableObject {
+public class FactMetaModel
+ implements
+ PortableObject {
- public String name;
+ private static final long serialVersionUID = 510L;
- public List<FieldMetaModel> fields = new ArrayList<FieldMetaModel>();
+ public String name;
- public FactMetaModel() {}
- public FactMetaModel(String name, List fields) {
- this.name = name;
- this.fields = fields;
- }
+ public List<FieldMetaModel> fields = new ArrayList<FieldMetaModel>();
+ public FactMetaModel() {
+ }
+ public FactMetaModel(String name) {
+ this.name = name;
+ }
+ public FactMetaModel(String name,
+ List<FieldMetaModel> fields) {
+ this.name = name;
+ this.fields = fields;
+ }
+
}
-
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.util.AbstractLazyStackPanelHeader;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactModelEditor extends AbstractLazyStackPanelHeader {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ interface FactModelEditorBinder
+ extends
+ UiBinder<Widget, FactModelEditor> {
+ }
+
+ private static FactModelEditorBinder uiBinder = GWT.create( FactModelEditorBinder.class );
+
+ @UiField
+ Image icon;
+ @UiField
+ Label titleLabel;
+ @UiField
+ Image editIcon;
+ @UiField
+ Image moveUpIcon;
+ @UiField
+ Image moveDownIcon;
+ @UiField
+ Image deleteIcon;
+
+ private ClickHandler expandClickHandler = new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ onTitleClicked();
+ }
+ };
+
+ private final FactMetaModel factMetaModel;
+ private Command deleteEvent;
+
+ private Command moveUpCommand;
+ private Command moveDownCommand;
+
+ private ModelNameHelper modelNameHelper;
+
+ public void setDeleteEvent(Command deleteEvent) {
+
+ this.deleteEvent = deleteEvent;
+ }
+
+ public FactModelEditor(FactMetaModel factMetaModel) {
+
+ this.factMetaModel = factMetaModel;
+
+ add( uiBinder.createAndBindUi( this ) );
+
+ titleLabel.setText( factMetaModel.name );
+
+ icon.addClickHandler( expandClickHandler );
+ titleLabel.addClickHandler( expandClickHandler );
+
+ setIconImage();
+
+ moveUpIcon.setTitle( constants.MoveUp() );
+ moveDownIcon.setTitle( constants.MoveDown() );
+ deleteIcon.setTitle( constants.RemoveThisFactType() );
+
+ addOpenHandler( new OpenHandler<AbstractLazyStackPanelHeader>() {
+ public void onOpen(OpenEvent<AbstractLazyStackPanelHeader> event) {
+ expanded = true;
+ setIconImage();
+ }
+ } );
+
+ addCloseHandler( new CloseHandler<AbstractLazyStackPanelHeader>() {
+ public void onClose(CloseEvent<AbstractLazyStackPanelHeader> event) {
+ expanded = false;
+ setIconImage();
+ }
+ } );
+ }
+
+ @UiHandler("editIcon")
+ void editIconClick(ClickEvent event) {
+ final FactEditorPopup popup = new FactEditorPopup( factMetaModel,
+ modelNameHelper );
+
+ popup.setOkCommand( new Command() {
+ public void execute() {
+ titleLabel.setText( factMetaModel.name );
+ }
+ } );
+
+ popup.show();
+ }
+
+ @UiHandler("moveUpIcon")
+ void moveUpClick(ClickEvent event) {
+ moveUpCommand.execute();
+ }
+
+ @UiHandler("moveDownIcon")
+ void moveDownClick(ClickEvent event) {
+ moveDownCommand.execute();
+ }
+
+ @UiHandler("deleteIcon")
+ void deleteClick(ClickEvent event) {
+ if ( Window.confirm( constants.AreYouSureYouWantToRemoveThisFact() ) ) {
+ deleteEvent.execute();
+ }
+ }
+
+ public void setModelNameHelper(ModelNameHelper modelNameHelper) {
+ this.modelNameHelper = modelNameHelper;
+ }
+
+ private void setIconImage() {
+ if ( expanded ) {
+ icon.setUrl( "images/collapse.gif" );
+ } else {
+ icon.setUrl( "images/expand.gif" );
+ }
+
+ }
+
+ public void setMoveDownCommand(Command moveDownCommand) {
+ this.moveDownCommand = moveDownCommand;
+ }
+
+ public void setMoveUpCommand(Command moveUpCommand) {
+ this.moveUpCommand = moveUpCommand;
+ }
+
+ public void setUpVisible(boolean visible) {
+ moveUpIcon.setVisible( visible );
+ }
+
+ public void setDownVisible(boolean visible) {
+ moveDownIcon.setVisible( visible );
+ }
+
+ private void onTitleClicked() {
+ if ( expanded ) {
+ CloseEvent.fire( this,
+ this );
+ } else {
+ OpenEvent.fire( this,
+ this );
+ }
+ }
+
+ public FactMetaModel getFactModel() {
+ return factMetaModel;
+ }
+
+ public Widget getContent() {
+ return new FactFieldsEditor( factMetaModel.fields,
+ modelNameHelper );
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.ui.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.ui.xml (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelEditor.ui.xml 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,48 @@
+<!--
+ Copyright 2010 JBoss Inc
+
+ 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.
+ -->
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+ xmlns:gwt='urn:import:com.google.gwt.user.client.ui' xmlns:guvnor='urn:import:org.drools.guvnor.client.common'>
+
+ <gwt:HTMLPanel>
+ <div style="float:left;">
+ <gwt:HorizontalPanel >
+ <gwt:Image ui:field="icon" styleName="guvnor-LazyStackPanel-row-header-icon"></gwt:Image>
+ <gwt:Label ui:field="titleLabel" ></gwt:Label>
+ </gwt:HorizontalPanel>
+ </div>
+ <div style="float:right;">
+ <table>
+ <tr>
+ <td width="17px">
+ <gwt:Image ui:field="editIcon" url="images/edit.gif"></gwt:Image>
+ </td>
+ <td width="17px">
+ <gwt:Image ui:field="moveUpIcon" url="images/shuffle_up.gif"></gwt:Image>
+ </td>
+ <td width="17px">
+ <gwt:Image ui:field="moveDownIcon" url="images/shuffle_down.gif"></gwt:Image>
+ </td>
+ <td width="17px">
+ <gwt:Image ui:field="deleteIcon" url="images/delete_item_small.gif"></gwt:Image>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div style="clear:both;"></div>
+ </gwt:HTMLPanel>
+
+</ui:UiBinder>
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelWidget.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelWidget.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -1,472 +0,0 @@
-/*
- * Copyright 2010 JBoss Inc
- *
- * 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 org.drools.guvnor.client.factmodel;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.drools.guvnor.client.common.FormStylePopup;
-import org.drools.guvnor.client.common.ImageButton;
-import org.drools.guvnor.client.common.LoadingPopup;
-import org.drools.guvnor.client.common.SmallLabel;
-import org.drools.guvnor.client.messages.Constants;
-import org.drools.guvnor.client.packages.SuggestionCompletionCache;
-import org.drools.guvnor.client.rpc.RuleAsset;
-import org.drools.guvnor.client.rpc.RuleContentText;
-import org.drools.guvnor.client.ruleeditor.DefaultRuleContentWidget;
-import org.drools.guvnor.client.ruleeditor.RuleViewer;
-import org.drools.guvnor.client.ruleeditor.SaveEventListener;
-import org.drools.guvnor.client.util.Format;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.KeyboardListener;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-import com.gwtext.client.widgets.form.FormPanel;
-
-/**
- * The editor for fact models (drl declared types).
- *
- * @author Michael Neale
- */
-public class FactModelWidget extends Composite
- implements
- SaveEventListener {
-
- private RuleAsset asset;
- private VerticalPanel layout;
- private int editingFact = -1;
- private static Constants constants = ((Constants) GWT.create( Constants.class ));
- private static Map<String, String> TYPE_DESCRIPTIONS = new HashMap<String, String>() {
- private static final long serialVersionUID = 510l;
- {
- put( "Integer",
- constants.WholeNumberInteger() );
- put( "Boolean",
- constants.TrueOrFalse() );
- put( "java.util.Date",
- constants.Date() );
- put( "java.math.BigDecimal",
- constants.DecimalNumber() );
- put( "String",
- constants.Text() );
-
- }
- };
-
- public FactModelWidget(RuleAsset asset,
- RuleViewer viewer) {
- this( asset );
- }
-
- public FactModelWidget(final RuleAsset asset) {
- this.asset = asset;
- this.layout = new VerticalPanel();
-
- if ( asset.content instanceof RuleContentText ) {
- layout.add( new DefaultRuleContentWidget( asset ) );
- } else {
- //loadTestData(asset);
- if ( asset.content == null ) {
- asset.content = new FactModels();
- }
- renderEditor();
- }
-
- layout.setWidth( "100%" );
- initWidget( layout );
- setStyleName( "model-builder-Background" ); //NON-NLS
- }
-
- private void renderEditor() {
- layout.clear();
- final FactModels m = (FactModels) asset.content;
-
- String factHeaderStyle = "modeller-fact-TypeHeader"; //NON-NLS
- for ( int i = 0; i < m.models.size(); i++ ) {
-
- final FactMetaModel mm = (FactMetaModel) m.models.get( i );
-
- FormPanel config = new FormPanel();
- config.setTitle( mm.name );
- config.setCollapsible( true );
- config.setCollapsed( !(editingFact == i) );
-
- FlexTable tb = new FlexTable();
- config.add( tb );
- tb.setStyleName( "modeller-fact-pattern-Widget" ); //NON-NLS
- tb.setWidth( "100%" );
- //layout.add(tb);
- layout.add( config );
-
- final HorizontalPanel headerPanel = new HorizontalPanel();
- //headerPanel.add(new HTML("<b><small>" + mm.name + "</small></b>"));
-
- headerPanel.setVerticalAlignment( HasVerticalAlignment.ALIGN_MIDDLE );
- headerPanel.add( getMovePanel( m.models,
- mm,
- m.models.indexOf( mm ) ) );
-
- //ImageButton addField = new ImageButton("images/add_field_to_fact.gif");
- Button addField = new Button( constants.AddField() );
- addField.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- showFieldEditor( m,
- mm,
- null );
- }
- } );
- headerPanel.add( addField );
-
- Button changeName = new Button( constants.ChangeFactName() );
- changeName.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- final FormStylePopup pop = new FormStylePopup();
- HorizontalPanel changeName = new HorizontalPanel();
- final TextBox name = new TextBox();
- name.setText( mm.name );
- changeName.add( name );
- Button nameBut = new Button( constants.ChangeName() );
-
- nameBut.addKeyboardListener( noSpaceListener() );
-
- nameBut.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- if ( !uniqueName( name.getText(),
- m.models ) ) {
- Window.alert( Format.format( constants.NameTakenForModel(),
- name.getText() ) );
- return;
- }
- if ( Window.confirm( constants.ModelNameChangeWarning() ) ) {
- mm.name = name.getText();
- pop.hide();
- renderEditor();
- }
- }
- } );
- changeName.add( nameBut );
- pop.addAttribute( constants.ChangeFactName(),
- changeName );
-
- pop.show();
- }
- } );
- headerPanel.add( changeName );
-
- Button deleteFact = new Button( constants.Delete() );
- deleteFact.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- final FormStylePopup pop = new FormStylePopup();
-
- Button delFact = new Button( constants.Delete() );
- delFact.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- if ( Window.confirm( constants.AreYouSureYouWantToRemoveThisFact() ) ) {
- m.models.remove( mm );
- pop.hide();
- renderEditor();
- }
- }
- } );
- pop.addAttribute( constants.RemoveThisFactType(),
- delFact );
-
- pop.show();
- }
- } );
- headerPanel.add( deleteFact );
-
- tb.setWidget( 0,
- 0,
- new VerticalPanel() {
- {
- add( headerPanel );
- setStyleName( "fact-model-fact-edit-selections" );
- setWidth( "100%" );
- }
- } );
- FlexCellFormatter formatter = tb.getFlexCellFormatter();
- formatter.setColSpan( 0,
- 0,
- 2 );
- formatter.setStyleName( 0,
- 0,
- factHeaderStyle );
- formatter.setHorizontalAlignment( 0,
- 0,
- HasHorizontalAlignment.ALIGN_LEFT );
-
- for ( int j = 0; j < mm.fields.size(); j++ ) {
- final FieldMetaModel fm = (FieldMetaModel) mm.fields.get( j );
- String ms = Format.format( constants.FieldName(),
- fm.name );
- tb.setWidget( j + 1,
- 0,
- new HTML( ms ) );
- formatter.setHorizontalAlignment( j + 1,
- 0,
- HasHorizontalAlignment.ALIGN_RIGHT );
-
- HorizontalPanel type = new HorizontalPanel();
- type.setVerticalAlignment( HasVerticalAlignment.ALIGN_MIDDLE );
- type.add( new SmallLabel( getDesc( fm ) ) );
- ImageButton del = new ImageButton( "images/delete_item_small.gif" ); //NON-NLS
- del.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- if ( Window.confirm( Format.format( constants.AreYouSureYouWantToRemoveTheField0(),
- fm.name ) ) ) {
- mm.fields.remove( fm );
- editingFact = m.models.indexOf( mm );
- renderEditor();
- }
- }
- } );
-
- ImageButton edit = new ImageButton( "images/edit.gif" ); //NON-NLS
- edit.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- showFieldEditor( m,
- mm,
- fm );
- }
- } );
-
- type.add( edit );
- type.add( del );
-
- tb.setWidget( j + 1,
- 1,
- type );
- formatter.setHorizontalAlignment( j + 1,
- 1,
- HasHorizontalAlignment.ALIGN_LEFT );
- }
-
- }
- final Button addNewFact = new Button( constants.AddNewFactType() );
- addNewFact.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- String type = Window.prompt( constants.NewType(),
- constants.EnterNewTypeName() );
- if ( type != null ) {
- if ( uniqueName( type,
- m.models ) ) {
- m.models.add( new FactMetaModel( type,
- new ArrayList() ) );
- editingFact = m.models.size() - 1;
- renderEditor();
- } else {
- Window.alert( Format.format( constants.TypeNameExistsWarning(),
- type ) );
- addNewFact.click();
- }
- }
- }
- } );
- layout.add( addNewFact );
-
- }
-
- private VerticalPanel getMovePanel(final List< ? extends Object> list,
- final Object object,
- final int editingFactIndex) {
- final int index = list.indexOf( object );
- VerticalPanel arrows = new VerticalPanel();
- ImageButton up = new ImageButton( "images/arrow-up.gif",
- constants.MoveUp() );
- // Topmost item can not be moved up. So hide the button.
- up.setVisible( index != 0 );
- up.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- Collections.swap( list,
- index,
- index - 1 );
-
- if ( object instanceof FactMetaModel ) {
- editingFact = index - 1;
- } else {
- editingFact = editingFactIndex;
- }
-
- renderEditor();
- }
- } );
- arrows.add( up );
-
- ImageButton down = new ImageButton( "images/arrow-down.gif",
- constants.MoveDown() );
- // Last item can not be moved down. So hide the button.
- down.setVisible( index != (list.size() - 1) );
- down.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- Collections.swap( list,
- index,
- index + 1 );
-
- if ( object instanceof FactMetaModel ) {
- editingFact = index + 1;
- } else {
- editingFact = editingFactIndex;
- }
-
- renderEditor();
- }
- } );
- arrows.add( down );
- return arrows;
- }
-
- private boolean uniqueName(String type,
- List<FactMetaModel> models) {
- for ( FactMetaModel m : models ) {
- if ( m.name.equals( type ) ) {
- return false;
- }
- }
- return true;
- }
-
- private String getDesc(FieldMetaModel fm) {
- if ( TYPE_DESCRIPTIONS.containsKey( fm.type ) ) {
- return TYPE_DESCRIPTIONS.get( fm.type );
- }
- return fm.type;
- }
-
- /**
- * Display the field editor.
- */
- private void showFieldEditor(final FactModels models,
- final FactMetaModel mm,
- final FieldMetaModel field) {
- final FormStylePopup pop = new FormStylePopup();
- final TextBox fieldName = new TextBox();
- final TextBox fieldType = new TextBox();
- fieldName.addKeyboardListener( noSpaceListener() );
- fieldType.addKeyboardListener( noSpaceListener() );
- if ( field != null ) {
- fieldName.setText( field.name );
- fieldType.setText( field.type );
- }
- HorizontalPanel typeP = new HorizontalPanel();
- typeP.add( fieldType );
- final ListBox typeChoice = new ListBox();
- typeChoice.addItem( constants.chooseType() );
-
- for ( String k : TYPE_DESCRIPTIONS.keySet() ) {
- typeChoice.addItem( TYPE_DESCRIPTIONS.get( k ),
- k );
- }
-
- int idx = models.models.indexOf( mm );
- for ( int i = 0; i < idx; i++ ) {
- FactMetaModel mm_ = (FactMetaModel) models.models.get( i );
- typeChoice.addItem( mm_.name );
- }
- typeChoice.setSelectedIndex( 0 );
- typeChoice.addChangeListener( new ChangeListener() {
- public void onChange(Widget w) {
- fieldType.setText( typeChoice.getValue( typeChoice.getSelectedIndex() ) );
- }
- } );
-
- typeP.add( typeChoice );
-
- pop.addAttribute( constants.FieldNameAttribute(),
- fieldName );
- pop.addAttribute( constants.Type(),
- typeP );
-
- Button ok = new Button( constants.OK() );
- ok.addClickListener( new ClickListener() {
- public void onClick(Widget arg0) {
- FieldMetaModel fld = field;
- if ( field == null ) {
- fld = new FieldMetaModel();
- mm.fields.add( fld );
- }
- fld.name = fieldName.getText();
- fld.type = fieldType.getText();
- editingFact = models.models.indexOf( mm );
- renderEditor();
- pop.hide();
- }
- } );
- pop.addAttribute( "",
- ok );
-
- pop.show();
- }
-
- private KeyboardListener noSpaceListener() {
- return new KeyboardListener() {
- public void onKeyDown(Widget arg0,
- char arg1,
- int arg2) {
- }
-
- public void onKeyPress(Widget w,
- char c,
- int i) {
- if ( c == ' ' ) {
- ((TextBox) w).cancelKey();
- }
- }
-
- public void onKeyUp(Widget arg0,
- char arg1,
- int arg2) {
-
- }
-
- };
- }
-
- public void onAfterSave() {
- LoadingPopup.showMessage( constants.RefreshingModel() );
- SuggestionCompletionCache.getInstance().loadPackage( this.asset.metaData.packageName,
- new Command() {
- public void execute() {
- LoadingPopup.close();
- }
- } );
- }
-
- public void onSave() {
- //not needed.
-
- }
-
-}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModels.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModels.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModels.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,15 +16,22 @@
package org.drools.guvnor.client.factmodel;
-import org.drools.ide.common.client.modeldriven.brl.PortableObject;
-
import java.util.ArrayList;
import java.util.List;
-import java.io.Serializable;
-public class FactModels implements PortableObject {
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
- public List<FactMetaModel> models = new ArrayList<FactMetaModel>();
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactModels
+ implements
+ PortableObject {
+ private static final long serialVersionUID = 510L;
+ public List<FactMetaModel> models = new ArrayList<FactMetaModel>();
+
}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.util.AbstractLazyStackPanelHeader;
+import org.drools.guvnor.client.util.AddButton;
+import org.drools.guvnor.client.util.LazyStackPanel;
+import org.drools.guvnor.client.util.LoadContentCommand;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FactModelsEditor extends Composite {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ interface FactModelsEditorBinder
+ extends
+ UiBinder<Widget, FactModelsEditor> {
+ }
+
+ private static FactModelsEditorBinder uiBinder = GWT.create( FactModelsEditorBinder.class );
+
+ @UiField
+ LazyStackPanel factModelsPanel;
+
+ @UiField
+ AddButton addFactIcon;
+
+ private final List<FactMetaModel> factModels;
+
+ private final ModelNameHelper modelNameHelper = new ModelNameHelper();
+
+ public FactModelsEditor(List<FactMetaModel> factModels) {
+ this.factModels = factModels;
+
+ initWidget( uiBinder.createAndBindUi( this ) );
+
+ addFactIcon.setTitle( constants.AddNewFactType() );
+ addFactIcon.setText( constants.AddNewFactType() );
+
+ fillModels();
+ }
+
+ public void addFactModelToStackPanel(final FactMetaModel factMetaModel) {
+ final FactModelEditor editor = new FactModelEditor( factMetaModel );
+
+ modelNameHelper.getTypeDescriptions().put( factMetaModel.name,
+ factMetaModel.name );
+
+ editor.setModelNameHelper( modelNameHelper );
+
+ editor.setMoveDownCommand( getMoveDownCommand( factMetaModel ) );
+
+ editor.setMoveUpCommand( getMoveUpCommand( factMetaModel ) );
+
+ editor.setDeleteEvent( getDeleteCommand( factMetaModel ) );
+
+ factModelsPanel.add( editor,
+ new LoadContentCommand() {
+ public Widget load() {
+ return editor.getContent();
+ }
+ } );
+
+ renderEditorArrows();
+ }
+
+ private Command getDeleteCommand(final FactMetaModel factMetaModel) {
+ return new Command() {
+ public void execute() {
+ int index = factModels.indexOf( factMetaModel );
+
+ modelNameHelper.getTypeDescriptions().remove( factMetaModel.name );
+ factModels.remove( factMetaModel );
+ factModelsPanel.remove( index );
+ }
+ };
+ }
+
+ private Command getMoveUpCommand(final FactMetaModel factMetaModel) {
+ return new Command() {
+
+ public void execute() {
+ int editingFactIndex = factModels.indexOf( factMetaModel );
+ int newIndex = editingFactIndex - 1;
+
+ swap( editingFactIndex,
+ newIndex );
+
+ renderEditorArrows();
+ }
+
+ };
+ }
+
+ private Command getMoveDownCommand(final FactMetaModel factMetaModel) {
+ return new Command() {
+
+ public void execute() {
+ int editingFactIndex = factModels.indexOf( factMetaModel );
+ int newIndex = editingFactIndex + 1;
+
+ swap( editingFactIndex,
+ newIndex );
+
+ renderEditorArrows();
+ }
+ };
+ }
+
+ private void swap(int editingFactIndex,
+ int newIndex) {
+ Collections.swap( factModels,
+ editingFactIndex,
+ newIndex );
+
+ factModelsPanel.swap( editingFactIndex,
+ newIndex );
+ }
+
+ private void renderEditorArrows() {
+ Iterator<AbstractLazyStackPanelHeader> iterator = factModelsPanel.getHeaderIterator();
+
+ while ( iterator.hasNext() ) {
+ AbstractLazyStackPanelHeader widget = (AbstractLazyStackPanelHeader) iterator.next();
+
+ if ( widget instanceof FactModelEditor ) {
+ FactModelEditor editor = (FactModelEditor) widget;
+
+ int index = factModels.indexOf( editor.getFactModel() );
+ editor.setUpVisible( index != 0 );
+ editor.setDownVisible( index != (factModels.size() - 1) );
+ }
+ }
+ }
+
+ private void fillModels() {
+ for ( final FactMetaModel factMetaModel : factModels ) {
+ addFactModelToStackPanel( factMetaModel );
+ }
+ }
+
+ @UiHandler("addFactIcon")
+ void addFactClick(ClickEvent event) {
+ final FactEditorPopup popup = new FactEditorPopup( modelNameHelper );
+
+ popup.setOkCommand( new Command() {
+ public void execute() {
+ FactMetaModel factMetaModel = popup.getFactModel();
+
+ factModels.add( factMetaModel );
+ addFactModelToStackPanel( factMetaModel );
+ }
+ } );
+ popup.show();
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.ui.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.ui.xml (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsEditor.ui.xml 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,25 @@
+<!--
+ Copyright 2010 JBoss Inc
+
+ 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.
+ -->
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+ xmlns:gwt='urn:import:com.google.gwt.user.client.ui' xmlns:guvnor='urn:import:org.drools.guvnor.client.util'>
+
+ <gwt:HTMLPanel>
+ <guvnor:AddButton ui:field="addFactIcon" ></guvnor:AddButton>
+ <guvnor:LazyStackPanel ui:field="factModelsPanel"></guvnor:LazyStackPanel>
+ </gwt:HTMLPanel>
+
+</ui:UiBinder>
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsWidget.java (from rev 35400, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelWidget.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsWidget.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FactModelsWidget.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import org.drools.guvnor.client.common.LoadingPopup;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.packages.SuggestionCompletionCache;
+import org.drools.guvnor.client.rpc.RuleAsset;
+import org.drools.guvnor.client.rpc.RuleContentText;
+import org.drools.guvnor.client.ruleeditor.DefaultRuleContentWidget;
+import org.drools.guvnor.client.ruleeditor.RuleViewer;
+import org.drools.guvnor.client.ruleeditor.SaveEventListener;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * The editor for fact models (DRL declared types).
+ *
+ * @author Michael Neale
+ */
+public class FactModelsWidget extends Composite
+ implements
+ SaveEventListener {
+
+ private RuleAsset asset;
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ public FactModelsWidget(RuleAsset asset,
+ RuleViewer viewer) {
+ this( asset );
+ }
+
+ public FactModelsWidget(final RuleAsset asset) {
+ this.asset = asset;
+
+ if ( isContentPlainText() ) {
+ initWidget( getPlainTextEditor() );
+ } else {
+ initWidget( getFactModelsEditor() );
+ }
+
+ setWidth( "100%" );
+
+ setStyleName( "model-builder-Background" ); //NON-NLS
+ }
+
+ private boolean isContentPlainText() {
+ return asset.content instanceof RuleContentText;
+ }
+
+ private Widget getPlainTextEditor() {
+ return new DefaultRuleContentWidget( asset );
+ }
+
+ private Widget getFactModelsEditor() {
+ if ( asset.content == null ) {
+ asset.content = new FactModels();
+ }
+
+ return new FactModelsEditor( ((FactModels) asset.content).models );
+
+ }
+
+ public void onAfterSave() {
+ LoadingPopup.showMessage( constants.RefreshingModel() );
+ SuggestionCompletionCache.getInstance().loadPackage( this.asset.metaData.packageName,
+ new Command() {
+ public void execute() {
+ LoadingPopup.close();
+ }
+ } );
+ }
+
+ public void onSave() {
+ //not needed.
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldEditorPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldEditorPopup.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldEditorPopup.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import java.util.Map;
+
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.messages.Constants;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextBox;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class FieldEditorPopup {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ private final FieldMetaModel field;
+
+ private final ModelNameHelper modelNameHelper;
+
+ private Command okCommand;
+
+ public FieldEditorPopup(ModelNameHelper modelNameHelper) {
+ this( new FieldMetaModel(),
+ modelNameHelper );
+ }
+
+ public FieldEditorPopup(FieldMetaModel field,
+ ModelNameHelper modelNameHelper) {
+ this.field = field;
+ this.modelNameHelper = modelNameHelper;
+ }
+
+ public FieldMetaModel getField() {
+ return field;
+ }
+
+ public void setOkCommand(Command okCommand) {
+ this.okCommand = okCommand;
+ }
+
+ public void show() {
+ final FormStylePopup pop = new FormStylePopup();
+ final TextBox fieldName = new TextBox();
+ final TextBox fieldType = new TextBox();
+ fieldName.addKeyPressHandler( new NoSpaceKeyPressHandler() );
+ fieldType.addKeyPressHandler( new NoSpaceKeyPressHandler() );
+ if ( field != null ) {
+ fieldName.setText( field.name );
+ fieldType.setText( field.type );
+ }
+ HorizontalPanel typeP = new HorizontalPanel();
+ typeP.add( fieldType );
+ final ListBox typeChoice = new ListBox();
+ typeChoice.addItem( constants.chooseType() );
+
+ for ( Map.Entry<String, String> entry : modelNameHelper.getTypeDescriptions().entrySet() ) {
+ typeChoice.addItem( entry.getValue(),
+ entry.getKey() );
+ }
+
+ typeChoice.setSelectedIndex( 0 );
+ typeChoice.addChangeHandler( new ChangeHandler() {
+ public void onChange(ChangeEvent event) {
+ fieldType.setText( typeChoice.getValue( typeChoice.getSelectedIndex() ) );
+ }
+ } );
+
+ typeP.add( typeChoice );
+
+ pop.addAttribute( constants.FieldNameAttribute(),
+ fieldName );
+ pop.addAttribute( constants.Type(),
+ typeP );
+
+ Button ok = new Button( constants.OK() );
+ ok.addClickHandler( new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+
+ field.name = fieldName.getText();
+ field.type = fieldType.getText();
+
+ okCommand.execute();
+
+ pop.hide();
+ }
+ } );
+ pop.addAttribute( "",
+ ok );
+
+ pop.show();
+ }
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldMetaModel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldMetaModel.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/FieldMetaModel.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,20 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.drools.guvnor.client.factmodel;
import org.drools.ide.common.client.modeldriven.brl.PortableObject;
-public class FieldMetaModel implements PortableObject {
+public class FieldMetaModel
+ implements
+ PortableObject {
- public String name;
- public String type;
+ private static final long serialVersionUID = 510l;
+ public String name;
+ public String type;
- public FieldMetaModel() {}
- public FieldMetaModel(String name, String type) {
- this.name = name;
- this.type = type;
- }
+ public FieldMetaModel() {
+ }
+ public FieldMetaModel(String name,
+ String type) {
+ this.name = name;
+ this.type = type;
+ }
+
}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/ModelNameHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/ModelNameHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/ModelNameHelper.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.guvnor.client.messages.Constants;
+
+import com.google.gwt.core.client.GWT;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class ModelNameHelper {
+
+ private static Constants constants = ((Constants) GWT.create( Constants.class ));
+
+ private static Map<String, String> TYPE_DESCRIPTIONS = new HashMap<String, String>() {
+ private static final long serialVersionUID = 510l;
+ {
+ put( "Integer",
+ constants.WholeNumberInteger() );
+ put( "Boolean",
+ constants.TrueOrFalse() );
+ put( "java.util.Date",
+ constants.Date() );
+ put( "java.math.BigDecimal",
+ constants.DecimalNumber() );
+ put( "String",
+ constants.Text() );
+
+ }
+ };
+
+ public String getDesc(FieldMetaModel fieldMetaModel) {
+ if ( TYPE_DESCRIPTIONS.containsKey( fieldMetaModel.type ) ) {
+ return TYPE_DESCRIPTIONS.get( fieldMetaModel.type );
+ }
+ return fieldMetaModel.type;
+ }
+
+ public Map<String, String> getTypeDescriptions() {
+ return TYPE_DESCRIPTIONS;
+ }
+
+ public boolean isUniqueName(String type) {
+ if ( getTypeDescriptions().containsKey( type ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ public void changeNameInModelNameHelper(String oldName,
+ String newName) {
+ getTypeDescriptions().remove( oldName );
+ getTypeDescriptions().put( newName,
+ newName );
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/NoSpaceKeyPressHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/NoSpaceKeyPressHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/factmodel/NoSpaceKeyPressHandler.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.factmodel;
+
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.ui.TextBox;
+
+/**
+ *
+ * @author rikkola
+ *
+ */
+public class NoSpaceKeyPressHandler
+ implements
+ KeyPressHandler {
+
+ public void onKeyPress(KeyPressEvent event) {
+ if ( isTheCharacterSpace( event ) ) {
+ ((TextBox) event.getSource()).cancelKey();
+ }
+ }
+
+ private boolean isTheCharacterSpace(KeyPressEvent event) {
+ return event.getCharCode() == ' ';
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -42,7 +42,7 @@
import org.drools.guvnor.client.decisiontable.DecisionTableXLSWidget;
import org.drools.guvnor.client.decisiontable.GuidedDecisionTableWidget;
import org.drools.guvnor.client.explorer.Preferences;
-import org.drools.guvnor.client.factmodel.FactModelWidget;
+import org.drools.guvnor.client.factmodel.FactModelsWidget;
import org.drools.guvnor.client.modeldriven.ui.RuleModeller;
import org.drools.guvnor.client.modeldriven.ui.RuleModellerWidgetFactory;
import org.drools.guvnor.client.packages.ModelAttachmentFileWidget;
@@ -119,7 +119,7 @@
} else if ( asset.metaData.format.equals( AssetFormats.DECISION_TABLE_GUIDED ) ) {
return new GuidedDecisionTableWidget( asset );
} else if ( asset.metaData.format.equals( AssetFormats.DRL_MODEL ) ) {
- return new FactModelWidget( asset );
+ return new FactModelsWidget( asset );
} else if ( asset.metaData.format.equals( AssetFormats.DSL ) ) {
return new DefaultRuleContentWidget( asset );
} else if ( asset.metaData.format.equals( AssetFormats.PROPERTIES ) ) {
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AbstractLazyStackPanelHeader.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AbstractLazyStackPanelHeader.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AbstractLazyStackPanelHeader.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,29 @@
+package org.drools.guvnor.client.util;
+
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.HasCloseHandlers;
+import com.google.gwt.event.logical.shared.HasOpenHandlers;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.SimplePanel;
+
+public abstract class AbstractLazyStackPanelHeader extends SimplePanel
+ implements
+ HasCloseHandlers<AbstractLazyStackPanelHeader>,
+ HasOpenHandlers<AbstractLazyStackPanelHeader> {
+
+ protected boolean expanded = false;
+
+ public HandlerRegistration addOpenHandler(OpenHandler<AbstractLazyStackPanelHeader> handler) {
+ return addHandler( handler,
+ OpenEvent.getType() );
+ }
+
+ public HandlerRegistration addCloseHandler(CloseHandler<AbstractLazyStackPanelHeader> handler) {
+ return addHandler( handler,
+ CloseEvent.getType() );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AddButton.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AddButton.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/AddButton.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -0,0 +1,35 @@
+package org.drools.guvnor.client.util;
+
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+
+public class AddButton extends Composite
+ implements
+ HasClickHandlers {
+
+ private Image plusButton = new Image( "images/new_item.gif" );
+
+ private Label textLabel = new Label();
+
+ public AddButton() {
+ HorizontalPanel panel = new HorizontalPanel();
+ panel.add( plusButton );
+ panel.add( textLabel );
+
+ initWidget( panel );
+ }
+
+ public void setText(String text) {
+ textLabel.setText( text );
+ }
+
+ public HandlerRegistration addClickHandler(ClickHandler handler) {
+ textLabel.addClickHandler( handler );
+ return plusButton.addClickHandler( handler );
+ }
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanel.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanel.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -15,14 +15,21 @@
*/
package org.drools.guvnor.client.util;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.Widget;
/**
* The GWT StackPanel is not working as we want. So doing a custom one.
@@ -30,13 +37,21 @@
* @author rikkola
*
*/
-public class LazyStackPanel extends FlexTable
+public class LazyStackPanel extends Composite
implements
HasSelectionHandlers<LazyStackPanelRow> {
- private int rowIndex = 0;
+ private FlexTable flexTable = new FlexTable();
+ private int rowIndex = 0;
+
public LazyStackPanel() {
+
+ initWidget( flexTable );
+
+
+ flexTable.setStyleName( "guvnor-lazyStackPanel" );
+
addSelectionHandler( new SelectionHandler<LazyStackPanelRow>() {
public void onSelection(SelectionEvent<LazyStackPanelRow> event) {
LazyStackPanelRow row = event.getSelectedItem();
@@ -54,35 +69,47 @@
LazyStackPanelHeader header = new LazyStackPanelHeader( headerText );
+ add( header,
+ contentLoad );
+
+ }
+
+ public void add(AbstractLazyStackPanelHeader header,
+ LoadContentCommand contentLoad) {
final LazyStackPanelRow row = new LazyStackPanelRow( header,
contentLoad );
- header.addClickHandler( new ClickHandler() {
- public void onClick(ClickEvent event) {
+ header.addOpenHandler( new OpenHandler<AbstractLazyStackPanelHeader>() {
+ public void onOpen(OpenEvent<AbstractLazyStackPanelHeader> event) {
selectRow( row );
}
} );
+ header.addCloseHandler( new CloseHandler<AbstractLazyStackPanelHeader>() {
+ public void onClose(com.google.gwt.event.logical.shared.CloseEvent<AbstractLazyStackPanelHeader> event) {
+ selectRow( row );
+ }
+ } );
+
addHeaderRow( row );
addContentRow( row.getContentPanel() );
-
}
private void addHeaderRow(final LazyStackPanelRow row) {
- setWidget( rowIndex,
- 0,
- row );
- getFlexCellFormatter().setStyleName( rowIndex,
- 0,
- "guvnor-LazyStackPanel-row-header" );
+ flexTable.setWidget( rowIndex,
+ 0,
+ row );
+ flexTable.getFlexCellFormatter().setStyleName( rowIndex,
+ 0,
+ "guvnor-LazyStackPanel-row-header" );
rowIndex++;
}
private void addContentRow(final SimplePanel panel) {
- setWidget( rowIndex++,
- 0,
- panel );
+ flexTable.setWidget( rowIndex++,
+ 0,
+ panel );
}
private void selectRow(LazyStackPanelRow row) {
@@ -94,4 +121,57 @@
return addHandler( handler,
SelectionEvent.getType() );
}
+
+ public void swap(int firstIndex,
+ int secondIndex) {
+
+ // Every list item is made of the header and content row.
+ // So we have twice as many rows.
+ firstIndex = firstIndex * 2;
+ secondIndex = secondIndex * 2;
+
+ Widget firstHeader = flexTable.getWidget( firstIndex,
+ 0 );
+ Widget firstContent = flexTable.getWidget( firstIndex + 1,
+ 0 );
+ Widget secondHeader = flexTable.getWidget( secondIndex,
+ 0 );
+ Widget secondContent = flexTable.getWidget( secondIndex + 1,
+ 0 );
+
+ flexTable.setWidget( firstIndex,
+ 0,
+ secondHeader );
+ flexTable.setWidget( firstIndex + 1,
+ 0,
+ secondContent );
+ flexTable.setWidget( secondIndex,
+ 0,
+ firstHeader );
+ flexTable.setWidget( secondIndex + 1,
+ 0,
+ firstContent );
+ }
+
+ public Iterator<AbstractLazyStackPanelHeader> getHeaderIterator() {
+ List<AbstractLazyStackPanelHeader> result = new ArrayList<AbstractLazyStackPanelHeader>();
+ Iterator<Widget> iterator = flexTable.iterator();
+
+ while ( iterator.hasNext() ) {
+ Widget widget = (Widget) iterator.next();
+ if ( widget instanceof LazyStackPanelRow ) {
+ result.add( ((LazyStackPanelRow) widget).getHeader() );
+ }
+ }
+
+ return result.iterator();
+ }
+
+ public void remove(int index) {
+
+ index = index * 2;
+
+ flexTable.removeRow( index + 1 );
+ flexTable.removeRow( index );
+ }
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelHeader.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelHeader.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelHeader.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -16,10 +16,14 @@
package org.drools.guvnor.client.util;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
@@ -29,14 +33,14 @@
* @author rikkola
*
*/
-public class LazyStackPanelHeader extends Composite {
+public class LazyStackPanelHeader extends AbstractLazyStackPanelHeader {
interface LazyStackPanelHeaderBinder
extends
UiBinder<Widget, LazyStackPanelHeader> {
}
- private static LazyStackPanelHeaderBinder uiBinder = GWT.create( LazyStackPanelHeaderBinder.class );
+ private static LazyStackPanelHeaderBinder uiBinder = GWT.create( LazyStackPanelHeaderBinder.class );
@UiField
Image icon;
@@ -44,15 +48,55 @@
@UiField
Label titleLabel;
+ private ClickHandler expandClickHandler = new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ onTitleClicked();
+ }
+ };
+
public LazyStackPanelHeader(String headerText) {
- initWidget( uiBinder.createAndBindUi( this ) );
+ add( uiBinder.createAndBindUi( this ) );
titleLabel.setText( headerText );
+
+ icon.addClickHandler( expandClickHandler );
+ titleLabel.addClickHandler( expandClickHandler );
+
+ setIconImage();
+
+ addOpenHandler( new OpenHandler<AbstractLazyStackPanelHeader>() {
+ public void onOpen(OpenEvent<AbstractLazyStackPanelHeader> event) {
+ expanded = true;
+ setIconImage();
+ }
+ } );
+
+ addCloseHandler( new CloseHandler<AbstractLazyStackPanelHeader>() {
+ public void onClose(CloseEvent<AbstractLazyStackPanelHeader> event) {
+ expanded = false;
+ setIconImage();
+ }
+ } );
}
- public void addClickHandler(ClickHandler clickHandler) {
- icon.addClickHandler( clickHandler );
- titleLabel.addClickHandler( clickHandler );
+ private void setIconImage() {
+ if ( expanded ) {
+ icon.setUrl( "images/collapse.gif" );
+ } else {
+ icon.setUrl( "images/expand.gif" );
+ }
+
}
+
+ private void onTitleClicked() {
+ if ( expanded ) {
+ CloseEvent.fire( this,
+ this );
+ } else {
+ OpenEvent.fire( this,
+ this );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelRow.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelRow.java 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/LazyStackPanelRow.java 2010-10-11 09:44:34 UTC (rev 35474)
@@ -24,18 +24,20 @@
* @author rikkola
*
*/
-class LazyStackPanelRow extends VerticalPanel {
+public class LazyStackPanelRow extends VerticalPanel {
- private final LazyStackPanelHeader header;
- private final LoadContentCommand contentLoad;
- private Widget contentWidget = null;
- private SimplePanel contentPanel = new SimplePanel();
+ private final AbstractLazyStackPanelHeader header;
+ private final LoadContentCommand contentLoad;
+ private Widget contentWidget = null;
+ private SimplePanel contentPanel = new SimplePanel();
- private boolean expanded;
+ private boolean expanded;
- public LazyStackPanelRow(LazyStackPanelHeader titleWidget,
- LoadContentCommand contentLoad) {
+ public LazyStackPanelRow(AbstractLazyStackPanelHeader titleWidget,
+ LoadContentCommand contentLoad) {
+ this.setWidth( "100%" );
+
this.header = titleWidget;
this.contentLoad = contentLoad;
init();
@@ -44,12 +46,6 @@
private void init() {
clear();
- if ( expanded ) {
- header.icon.setUrl( "images/collapse.gif" );
- } else {
- header.icon.setUrl( "images/expand.gif" );
- }
-
add( header );
if ( contentWidget != null ) {
@@ -59,6 +55,10 @@
}
+ public AbstractLazyStackPanelHeader getHeader() {
+ return header;
+ }
+
public SimplePanel getContentPanel() {
return contentPanel;
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css 2010-10-08 19:34:47 UTC (rev 35473)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/Guvnor.css 2010-10-11 09:44:34 UTC (rev 35474)
@@ -31,25 +31,31 @@
}
.my-DisclosurePanel {
+
}
+
.my-DisclosurePanel-open {
+
}
+
.my-DisclosurePanel-closed {
+
}
-.my-DisclosurePanel .header,
-.my-DisclosurePanel .header a,
-.my-DisclosurePanel .header td {
- height:30px;
- background: white;
- text-decoration: none; /* Remove underline from header */
- color: white;
- cursor: pointer;
- cursor: hand;
+
+.my-DisclosurePanel .header,.my-DisclosurePanel .header a,.my-DisclosurePanel .header td
+ {
+ height: 30px;
+ background: white;
+ text-decoration: none; /* Remove underline from header */
+ color: white;
+ cursor: pointer;
+ cursor: hand;
}
+
.my-DisclosurePanel .content {
- border-left: 3px solid #e3e3e3;
- padding: 4px 0px 4px 8px;
- margin-left: 16px;
+ border-left: 3px solid #e3e3e3;
+ padding: 4px 0px 4px 8px;
+ margin-left: 16px;
}
.VerticalSplitPanel .vsplitter {
@@ -628,4 +634,12 @@
.guvnor-FormPanel {
background-color: #E3E3E3;
padding: 2px;
+}
+
+.guvnor-bold-label {
+ font-weight: bold;
+}
+
+.guvnor-lazyStackPanel {
+ border-collapse:collapse;
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list