Skip to content

Commit

Permalink
BZ-1052269 - Guided rule editor: rule with incomplete String constrai…
Browse files Browse the repository at this point in the history
…nt reopens with different definition and elements missing
  • Loading branch information
Rikkola committed Mar 7, 2014
1 parent f5f5184 commit c0c8dc0
Show file tree
Hide file tree
Showing 16 changed files with 799 additions and 536 deletions.
@@ -0,0 +1,67 @@
/*
* Copyright 2014 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.workbench.screens.guided.rule.client.editor;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
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 org.drools.workbench.screens.guided.rule.client.resources.GuidedRuleEditorResources;
import org.drools.workbench.screens.guided.rule.client.resources.i18n.Constants;
import org.drools.workbench.screens.guided.rule.client.resources.images.GuidedRuleEditorImages508;
import org.uberfire.client.common.ImageButton;

public class AddConstraintButton
extends Composite {

private final ImageButton imageButton = getAddButton();

private final Image error = GuidedRuleEditorImages508.INSTANCE.Error();

public AddConstraintButton(ClickHandler clickHandler) {
imageButton.addClickHandler(clickHandler);

HorizontalPanel widgets = new HorizontalPanel();
widgets.add(imageButton);
error.setVisible(false);
error.setTitle(GuidedRuleEditorResources.CONSTANTS.PleaseSetTheConstraintValue());
error.setAltText(GuidedRuleEditorResources.CONSTANTS.PleaseSetTheConstraintValue());
widgets.add(error);

initWidget(widgets);
}

public void showError() {
error.setVisible(true);
}

public void hideError() {
error.setVisible(false);
}

private ImageButton getAddButton() {
return new ImageButton(
GuidedRuleEditorImages508.INSTANCE.Edit(),
GuidedRuleEditorImages508.INSTANCE.EditDisabled(),
GuidedRuleEditorResources.CONSTANTS.Edit()
);
}

public void setEnabled(boolean enabled) {
imageButton.setEnabled(enabled);
}
}

Large diffs are not rendered by default.

Expand Up @@ -408,20 +408,21 @@ private void save() {
new SaveOperationService().save( path,
new CommandWithCommitMessage() {
@Override
public void execute( final String commitMessage ) {
view.showBusyIndicator( CommonConstants.INSTANCE.Saving() );
service.call( getSaveSuccessCallback(),
new HasBusyIndicatorDefaultErrorCallback( view ) ).save( path,
view.getContent(),
metadataWidget.getContent(),
commitMessage );
public void execute(final String commitMessage) {
view.showBusyIndicator(CommonConstants.INSTANCE.Saving());
service.call(getSaveSuccessCallback(),
new HasBusyIndicatorDefaultErrorCallback(view)).save(path,
view.getContent(),
metadataWidget.getContent(),
commitMessage);

}
}
);

concurrentUpdateSessionInfo = null;
} else {
ErrorPopup.showMessage( validator.getErrorMessage() );
ErrorPopup.showMessage(validator.getErrors().get(0));
}
}

Expand Down
Expand Up @@ -25,6 +25,7 @@
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import org.drools.workbench.models.datamodel.rule.RuleModel;
import org.drools.workbench.screens.guided.rule.client.resources.GuidedRuleEditorResources;
import org.guvnor.common.services.shared.rulenames.RuleNamesService;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;
Expand Down Expand Up @@ -73,8 +74,7 @@ public void callback( Collection<String> ruleNames ) {

@Override
public String getTitle(String fileName) {
Constants constants = GWT.create(Constants.class);
return constants.GuidedRuleEditorTitle() + " [" + fileName + "]";
return GuidedRuleEditorResources.CONSTANTS.GuidedRuleEditorTitle() + " [" + fileName + "]";
}

@Override
Expand Down
@@ -1,15 +1,23 @@
package org.drools.workbench.screens.guided.rule.client.editor.validator;

import java.util.ArrayList;
import java.util.List;

import org.drools.workbench.models.datamodel.rule.CompositeFactPattern;
import org.drools.workbench.models.datamodel.rule.FactPattern;
import org.drools.workbench.models.datamodel.rule.FieldConstraint;
import org.drools.workbench.models.datamodel.rule.IPattern;
import org.drools.workbench.models.datamodel.rule.RuleModel;
import org.drools.workbench.models.datamodel.rule.SingleFieldConstraint;
import org.drools.workbench.screens.guided.rule.client.resources.i18n.Constants;

public class GuidedRuleEditorValidator {

private final List<String> errors = new ArrayList<String>();
private boolean isValid = true;

private final RuleModel model;
private final Constants constants;
private String errorMessage = "";

public GuidedRuleEditorValidator(RuleModel model, Constants constants) {
this.model = model;
Expand All @@ -21,42 +29,72 @@ public boolean isValid() {
if (model.lhs.length == 0) {
return true;
} else {
return validateCompositeFactPatterns();
validateIPatterns(model.lhs);
}

return isValid;

}

private boolean validateCompositeFactPatterns() {
for (int i = 0; i < model.lhs.length; i++) {
IPattern iPattern = model.lhs[i];
private void validateIPatterns(IPattern[] patterns) {
if (patterns == null) {
return;
}

for (IPattern iPattern : patterns) {
if (iPattern instanceof CompositeFactPattern) {
if (!hasPatterns((CompositeFactPattern) iPattern)) {
return false;
}
CompositeFactPattern compositeFactPattern = (CompositeFactPattern) iPattern;

hasPatterns(compositeFactPattern);

validateIPatterns(compositeFactPattern.getPatterns());

} else if (iPattern instanceof FactPattern) {
validateFactPattern((FactPattern) iPattern);
}
}

return true;
}

private boolean hasPatterns(CompositeFactPattern iPattern) {
private void hasPatterns(CompositeFactPattern iPattern) {

if (iPattern.getPatterns() == null) {
setMandatoryFieldsError();
return false;
} else if (iPattern.getPatterns().length == 0) {
setMandatoryFieldsError();
return false;
} else {
return true;
}
}

private void validateFactPattern(FactPattern factPattern) {
if (factPattern.getConstraintList() == null || factPattern.getConstraintList().getConstraints() == null) {
return;
}

for (FieldConstraint constraint : factPattern.getConstraintList().getConstraints()) {
if (constraint instanceof SingleFieldConstraint) {
SingleFieldConstraint singleFieldConstraint = (SingleFieldConstraint) constraint;
if (areOperatorAndValueInValid(singleFieldConstraint)) {
errors.add(
constants.FactType0HasAField1ThatHasAnOperatorSetButNoValuePleaseAddAValueOrRemoveTheOperator(
factPattern.getFactType(),
singleFieldConstraint.getFieldName()));
isValid = false;
}
}
}
}

private boolean areOperatorAndValueInValid(SingleFieldConstraint singleFieldConstraint) {
return !singleFieldConstraint.getOperator().equals("== null")
&& !singleFieldConstraint.getOperator().equals("!= null")
&& (singleFieldConstraint.getOperator() != null && singleFieldConstraint.getValue() == null);
}

private void setMandatoryFieldsError() {
errorMessage = constants.AreasMarkedWithRedAreMandatoryPleaseSetAValueBeforeSaving();
errors.add(constants.AreasMarkedWithRedAreMandatoryPleaseSetAValueBeforeSaving());
isValid = false;
}

public String getErrorMessage() {
return errorMessage;
public List<String> getErrors() {
return errors;
}
}
Expand Up @@ -349,9 +349,13 @@ String Append0ToList1( String varName,

String AreasMarkedWithRedAreMandatoryPleaseSetAValueBeforeSaving();

String GuidedRuleEditorTitle();

String GuidedRuleEditorTitle();
String guidedRuleDRLResourceTypeDescription();

String guidedRuleDSLResourceTypeDescription();

String PleaseSetTheConstraintValue();

String FactType0HasAField1ThatHasAnOperatorSetButNoValuePleaseAddAValueOrRemoveTheOperator(String factType, String fieldName);
}

0 comments on commit c0c8dc0

Please sign in to comment.