/*
* 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.eclipse.rulebuilder.ui;
import java.util.ArrayList;
import java.util.List;
import org.drools.ide.common.client.modeldriven.brl.RuleAttribute;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ImageHyperlink;
public class RuleAttributeWidget extends Widget {
public RuleAttributeWidget(FormToolkit toolkit,
Composite parent,
RuleModeller modeller) {
super( parent,
toolkit,
modeller,
0 );
GridLayout l = new GridLayout();
l.numColumns = 3;
// l.marginBottom = 5;
// l.marginHeight = 5;
// l.marginLeft = 5;
// l.marginRight = 5;
// l.marginTop = 10;
// l.marginWidth = 10;
// l.verticalSpacing = 15;
parent.setLayout( l );
create();
}
private void create() {
RuleAttribute[] attrs = modeller.getModel().attributes;
for ( int i = 0; i < attrs.length; i++ ) {
RuleAttribute at = attrs[i];
addAttribute( at );
}
toolkit.paintBordersFor( parent );
}
private void addAttribute(RuleAttribute at) {
toolkit.createLabel( parent,
at.attributeName );
if ( at.attributeName.equals( "no-loop" ) ) {
toolkit.createLabel( parent,
"" );
} else if ( at.attributeName.equals( "enabled" ) || at.attributeName.equals( "auto-focus" ) || at.attributeName.equals( "lock-on-active" ) ) {
createCheckbox( at );
} else {
createText( at );
}
addDeleteLink( at );
}
private void createText(final RuleAttribute at) {
final Text box = toolkit.createText( parent,
"" );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
gd.grabExcessHorizontalSpace = true;
gd.minimumWidth = 100;
box.setLayoutData( gd );
box.setText( at.value );
box.addModifyListener( new ModifyListener() {
public void modifyText(ModifyEvent e) {
at.value = box.getText();
modeller.setDirty( true );
}
} );
if ( at.attributeName.equals( "date-effective" ) || at.attributeName.equals( "date-expires" ) ) {
if ( at.value == null || "".equals( at.value.trim() ) ) {
box.setText( "dd-MMM-yyyy" );
}
}
}
private void createCheckbox(final RuleAttribute at) {
final Button checkbox = toolkit.createButton( parent,
"",
SWT.CHECK );
if ( at.value == null ) {
checkbox.setSelection( true );
at.value = "true";
} else {
checkbox.setSelection( at.value.equals( "true" ) ? true : false );
}
checkbox.addSelectionListener( new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
at.value = (checkbox.getSelection()) ? "true" : "false";
modeller.setDirty( true );
}
} );
}
private void addDeleteLink(final RuleAttribute at) {
ImageHyperlink delLink = addImage( parent,
"icons/delete_item_small.gif" );
delLink.setToolTipText( "Remove this fieldconstraint" );
delLink.addHyperlinkListener( new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
MessageBox dialog = new MessageBox( Display.getCurrent().getActiveShell(),
SWT.YES | SWT.NO | SWT.ICON_WARNING );
dialog.setMessage( "Remove this rule option?" );
dialog.setText( "Remove this rule option?" );
if ( dialog.open() == SWT.YES ) {
RuleAttribute[] attrs = modeller.getModel().attributes;
for ( int i = 0; i < attrs.length; i++ ) {
if ( attrs[i] == at ) {
modeller.getModel().removeAttribute( i );
modeller.setDirty( true );
modeller.reloadOptions();
}
}
}
}
public void linkEntered(HyperlinkEvent e) {
}
public void linkExited(HyperlinkEvent e) {
}
} );
}
/**
* Return a listbox of choices for rule attributes.
*
* @return
*/
public static List getAttributeList() {
List list = new ArrayList();
list.add( "..." );
list.add( "salience" );
list.add( "enabled" );
list.add( "date-effective" );
list.add( "date-expires" );
list.add( "no-loop" );
list.add( "agenda-group" );
list.add( "activation-group" );
list.add( "duration" );
list.add( "auto-focus" );
list.add( "lock-on-active" );
list.add( "ruleflow-group" );
list.add( "dialect" );
return list;
}
}