org.drools.guvnor.client.decisiontable.widget.auditlog.AuditLogEntryCellHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.drools.guvnor.client.decisiontable.widget.auditlog.AuditLogEntryCellHelper.java

Source

/*
 * Copyright 2012 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.decisiontable.widget.auditlog;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;

import org.drools.guvnor.client.messages.Constants;
import org.drools.ide.common.client.modeldriven.auditlog.AuditLogEntry;
import org.drools.ide.common.client.modeldriven.dt52.DTCellValue52;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.ActionInsertFactColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.ActionSetFieldColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.AttributeColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.ColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.ConditionColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.DecisionTableAuditLogFilter.DecisionTableAuditEvents;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.DeleteColumnAuditLogEntry;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.DeleteRowAuditLogEntry;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.InsertColumnAuditLogEntry;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.InsertRowAuditLogEntry;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.LimitedEntryActionInsertFactColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.LimitedEntryActionSetFieldColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.LimitedEntryConditionColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.MetadataColumnDetails;
import org.drools.ide.common.client.modeldriven.dt52.auditlog.UpdateColumnAuditLogEntry;

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

/**
 * Render different HTML for different AuditLogEvents
 */
@SuppressWarnings("unused")
public class AuditLogEntryCellHelper {

    interface Template extends SafeHtmlTemplates {

        @Template("<div>{0}</div>")
        SafeHtml commentHeader(String header);

        @Template("<div>{0}</div><table><tr><td><div class=\"auditLogDetailLabel\">{1}</div></td><td><div class=\"auditLogDetailValue\">{2}</div></td></tr><tr><td><div class=\"auditLogDetailLabel\">{3}</div></td><td><div class=\"auditLogDetailValue\">{4}</div></td></tr></table>")
        SafeHtml commentHeader2Details(String header, String row1Label, String row1Value, String row2Label,
                String row2Value);

        @Template("<div>{0}</div><table><tr><td><div class=\"auditLogDetailLabel\">{1}</div></td><td><div class=\"auditLogDetailValue\">{2}</div></td></tr><tr><td><div class=\"auditLogDetailLabel\">{3}</div></td><td><div class=\"auditLogDetailValue\">{4}</div></td></tr><tr><td><div class=\"auditLogDetailLabel\">{5}</div></td><td><div class=\"auditLogDetailValue\">{6}</div></td></tr></table>")
        SafeHtml commentHeader3Details(String header, String row1Label, String row1Value, String row2Label,
                String row2Value, String row3Label, String row3Value);

    }

    private static final Template TEMPLATE = GWT.create(Template.class);

    private final DateTimeFormat format;

    public AuditLogEntryCellHelper(final DateTimeFormat format) {
        this.format = format;
    }

    /**
     * Lookup display text for each AuditLogEntry type
     * 
     * @param eventType
     * @return
     */
    public static String getEventTypeDisplayText(final String eventType) {
        if (eventType.equals(DecisionTableAuditEvents.INSERT_COLUMN.name())) {
            return Constants.INSTANCE.DecisionTableAuditLogEventInsertColumn();
        } else if (eventType.equals(DecisionTableAuditEvents.INSERT_ROW.name())) {
            return Constants.INSTANCE.DecisionTableAuditLogEventInsertRow();
        } else if (eventType.equals(DecisionTableAuditEvents.UPDATE_COLUMN.name())) {
            return Constants.INSTANCE.DecisionTableAuditLogEventUpdateColumn();
        } else if (eventType.equals(DecisionTableAuditEvents.DELETE_COLUMN.name())) {
            return Constants.INSTANCE.DecisionTableAuditLogEventDeleteColumn();
        } else if (eventType.equals(DecisionTableAuditEvents.DELETE_ROW.name())) {
            return Constants.INSTANCE.DecisionTableAuditLogEventDeleteRow();
        }
        throw new IllegalArgumentException("Unrecognised AuditLogEntry type.");
    }

    public SafeHtml getSafeHtml(final AuditLogEntry event) {
        if (event instanceof UpdateColumnAuditLogEntry) {
            return getSafeHtml((UpdateColumnAuditLogEntry) event);
        } else if (event instanceof InsertColumnAuditLogEntry) {
            return getSafeHtml((InsertColumnAuditLogEntry) event);
        } else if (event instanceof DeleteColumnAuditLogEntry) {
            return getSafeHtml((DeleteColumnAuditLogEntry) event);
        } else if (event instanceof InsertRowAuditLogEntry) {
            return getSafeHtml((InsertRowAuditLogEntry) event);
        } else if (event instanceof DeleteRowAuditLogEntry) {
            return getSafeHtml((DeleteRowAuditLogEntry) event);
        }
        throw new IllegalArgumentException("Unrecognised AuditLogEntry type.");
    }

    private SafeHtml getSafeHtml(final InsertRowAuditLogEntry event) {
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        sb.append(TEMPLATE
                .commentHeader(Constants.INSTANCE.DecisionTableAuditLogInsertRowAt0(event.getRowIndex() + 1)));
        return sb.toSafeHtml();
    }

    private SafeHtml getSafeHtml(final DeleteRowAuditLogEntry event) {
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        sb.append(TEMPLATE
                .commentHeader(Constants.INSTANCE.DecisionTableAuditLogDeleteRowAt0(event.getRowIndex() + 1)));
        return sb.toSafeHtml();
    }

    private SafeHtml getSafeHtml(final InsertColumnAuditLogEntry event) {
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        buildColumnDetailsInsert(event.getDetails(), sb);
        return sb.toSafeHtml();
    }

    private SafeHtml getSafeHtml(final UpdateColumnAuditLogEntry event) {
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        buildColumnDetailsUpdate(event.getDetails(), event.getOriginalDetails(), sb);
        return sb.toSafeHtml();
    }

    private SafeHtml getSafeHtml(final DeleteColumnAuditLogEntry event) {
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        sb.append(TEMPLATE
                .commentHeader(Constants.INSTANCE.DecisionTableAuditLogDeleteColumn0(event.getColumnHeader())));
        return sb.toSafeHtml();
    }

    private void buildColumnDetailsInsert(final ColumnDetails details, final SafeHtmlBuilder sb) {
        if (details instanceof AttributeColumnDetails) {
            buildColumnDetailsInsert((AttributeColumnDetails) details, sb);
        } else if (details instanceof MetadataColumnDetails) {
            buildColumnDetailsInsert((MetadataColumnDetails) details, sb);
        } else if (details instanceof ConditionColumnDetails) {
            buildColumnDetailsInsert((ConditionColumnDetails) details, sb);
        } else if (details instanceof LimitedEntryConditionColumnDetails) {
            buildColumnDetailsInsert((LimitedEntryConditionColumnDetails) details, sb);
        } else if (details instanceof ActionInsertFactColumnDetails) {
            buildColumnDetailsInsert((ActionInsertFactColumnDetails) details, sb);
        } else if (details instanceof LimitedEntryActionInsertFactColumnDetails) {
            buildColumnDetailsInsert((LimitedEntryActionInsertFactColumnDetails) details, sb);
        } else if (details instanceof ActionSetFieldColumnDetails) {
            buildColumnDetailsInsert((ActionSetFieldColumnDetails) details, sb);
        } else if (details instanceof LimitedEntryActionSetFieldColumnDetails) {
            buildColumnDetailsInsert((LimitedEntryActionSetFieldColumnDetails) details, sb);
        } else {
            sb.append(TEMPLATE.commentHeader(
                    Constants.INSTANCE.DecisionTableAuditLogInsertColumn0(details.getColumnHeader())));
        }
    }

    private void buildColumnDetailsInsert(final AttributeColumnDetails details, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE
                .commentHeader(Constants.INSTANCE.DecisionTableAuditLogInsertAttribute0(details.getAttribute())));
    }

    private void buildColumnDetailsInsert(final MetadataColumnDetails details, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE
                .commentHeader(Constants.INSTANCE.DecisionTableAuditLogInsertMetadata0(details.getMetadata())));
    }

    private void buildColumnDetailsInsert(final ConditionColumnDetails details, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertCondition0(details.getColumnHeader()),
                Constants.INSTANCE.FieldColon(), nil(details.getFactField()), Constants.INSTANCE.OperatorColon(),
                nil(details.getOperator())));
    }

    private void buildColumnDetailsInsert(final LimitedEntryConditionColumnDetails details,
            final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertCondition0(details.getColumnHeader()),
                Constants.INSTANCE.FieldColon(), nil(details.getFactField()), Constants.INSTANCE.OperatorColon(),
                nil(details.getOperator()), Constants.INSTANCE.ValueColon(),
                nilLimitedEntryValue(details.getValue())));
    }

    private void buildColumnDetailsInsert(final ActionInsertFactColumnDetails details, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertActionInsertFact0(details.getColumnHeader()),
                Constants.INSTANCE.FactTypeColon(), nil(details.getFactType()), Constants.INSTANCE.FieldColon(),
                nil(details.getFactField())));
    }

    private void buildColumnDetailsInsert(final LimitedEntryActionInsertFactColumnDetails details,
            final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertActionInsertFact0(details.getColumnHeader()),
                Constants.INSTANCE.FactTypeColon(), nil(details.getFactType()), Constants.INSTANCE.FieldColon(),
                nil(details.getFactField()), Constants.INSTANCE.ValueColon(),
                nilLimitedEntryValue(details.getValue())));
    }

    private void buildColumnDetailsInsert(final ActionSetFieldColumnDetails details, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertActionSetField0(details.getColumnHeader()),
                Constants.INSTANCE.BoundVariableColon(), nil(details.getBoundName()),
                Constants.INSTANCE.FieldColon(), nil(details.getFactField())));
    }

    private void buildColumnDetailsInsert(final LimitedEntryActionSetFieldColumnDetails details,
            final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogInsertActionSetField0(details.getColumnHeader()),
                Constants.INSTANCE.BoundVariableColon(), nil(details.getBoundName()),
                Constants.INSTANCE.FieldColon(), nil(details.getFactField()), Constants.INSTANCE.ValueColon(),
                nilLimitedEntryValue(details.getValue())));
    }

    private void buildColumnDetailsUpdate(final ColumnDetails details, final ColumnDetails originalDetails,
            final SafeHtmlBuilder sb) {
        if ((details instanceof ConditionColumnDetails) && (originalDetails instanceof ConditionColumnDetails)) {
            buildColumnDetailsUpdate((ConditionColumnDetails) details, (ConditionColumnDetails) originalDetails,
                    sb);
        } else if ((details instanceof LimitedEntryConditionColumnDetails)
                && (originalDetails instanceof LimitedEntryConditionColumnDetails)) {
            buildColumnDetailsUpdate((LimitedEntryConditionColumnDetails) details,
                    (LimitedEntryConditionColumnDetails) originalDetails, sb);
        } else if ((details instanceof ActionInsertFactColumnDetails)
                && (originalDetails instanceof ActionInsertFactColumnDetails)) {
            buildColumnDetailsUpdate((ActionInsertFactColumnDetails) details,
                    (ActionInsertFactColumnDetails) originalDetails, sb);
        } else if ((details instanceof LimitedEntryActionInsertFactColumnDetails)
                && (originalDetails instanceof LimitedEntryActionInsertFactColumnDetails)) {
            buildColumnDetailsUpdate((LimitedEntryActionInsertFactColumnDetails) details,
                    (LimitedEntryActionInsertFactColumnDetails) originalDetails, sb);
        } else if ((details instanceof ActionSetFieldColumnDetails)
                && (originalDetails instanceof ActionSetFieldColumnDetails)) {
            buildColumnDetailsUpdate((ActionSetFieldColumnDetails) details,
                    (ActionSetFieldColumnDetails) originalDetails, sb);
        } else if ((details instanceof LimitedEntryActionSetFieldColumnDetails)
                && (originalDetails instanceof LimitedEntryActionSetFieldColumnDetails)) {
            buildColumnDetailsUpdate((LimitedEntryActionSetFieldColumnDetails) details,
                    (LimitedEntryActionSetFieldColumnDetails) originalDetails, sb);
        } else {
            sb.append(TEMPLATE.commentHeader(Constants.INSTANCE.DecisionTableAuditLogUpdateColumn0Was1(
                    details.getColumnHeader(), originalDetails.getColumnHeader())));
        }
    }

    private void buildColumnDetailsUpdate(final ConditionColumnDetails details,
            final ConditionColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateCondition0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.FieldColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getFactField()),
                        nil(originalDetails.getFactField())),
                Constants.INSTANCE.OperatorColon(), Constants.INSTANCE.DecisionTableAuditLog0Was1(
                        nil(details.getOperator()), nil(originalDetails.getOperator()))));
    }

    private void buildColumnDetailsUpdate(final LimitedEntryConditionColumnDetails details,
            final LimitedEntryConditionColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateCondition0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.FieldColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(
                        nil(details.getFactField()), nil(originalDetails.getFactField())),
                Constants.INSTANCE.OperatorColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getOperator()),
                        nil(originalDetails.getOperator())),
                Constants.INSTANCE.ValueColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nilLimitedEntryValue(details.getValue()),
                        nilLimitedEntryValue(originalDetails.getValue()))));
    }

    private void buildColumnDetailsUpdate(final ActionInsertFactColumnDetails details,
            final ActionInsertFactColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateAction0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.FactTypeColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getFactType()),
                        nil(originalDetails.getFactType())),
                Constants.INSTANCE.FieldColon(), Constants.INSTANCE.DecisionTableAuditLog0Was1(
                        nil(details.getFactField()), nil(originalDetails.getFactField()))));
    }

    private void buildColumnDetailsUpdate(final LimitedEntryActionInsertFactColumnDetails details,
            final LimitedEntryActionInsertFactColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateAction0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.FactTypeColon(),
                Constants.INSTANCE
                        .DecisionTableAuditLog0Was1(nil(details.getFactType()), nil(originalDetails.getFactType())),
                Constants.INSTANCE.FieldColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getFactField()),
                        nil(originalDetails.getFactField())),
                Constants.INSTANCE.ValueColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nilLimitedEntryValue(details.getValue()),
                        nilLimitedEntryValue(originalDetails.getValue()))));
    }

    private void buildColumnDetailsUpdate(final ActionSetFieldColumnDetails details,
            final ActionSetFieldColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader2Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateAction0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.BoundVariableColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getBoundName()),
                        nil(originalDetails.getBoundName())),
                Constants.INSTANCE.FieldColon(), Constants.INSTANCE.DecisionTableAuditLog0Was1(
                        nil(details.getFactField()), nil(originalDetails.getFactField()))));
    }

    private void buildColumnDetailsUpdate(final LimitedEntryActionSetFieldColumnDetails details,
            final LimitedEntryActionSetFieldColumnDetails originalDetails, final SafeHtmlBuilder sb) {
        sb.append(TEMPLATE.commentHeader3Details(
                Constants.INSTANCE.DecisionTableAuditLogUpdateAction0Was1(
                        details.getColumnHeader(), originalDetails.getColumnHeader()),
                Constants.INSTANCE.BoundVariableColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(
                        nil(details.getBoundName()), nil(originalDetails.getBoundName())),
                Constants.INSTANCE.FieldColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nil(details.getFactField()),
                        nil(originalDetails.getFactField())),
                Constants.INSTANCE.ValueColon(),
                Constants.INSTANCE.DecisionTableAuditLog0Was1(nilLimitedEntryValue(details.getValue()),
                        nilLimitedEntryValue(originalDetails.getValue()))));
    }

    private String nil(final String value) {
        return value == null ? "" : value;
    }

    private String nilLimitedEntryValue(final DTCellValue52 value) {
        String displayText = convertDTCellValueToString(value);
        return displayText == null ? "" : displayText;
    }

    private String convertDTCellValueToString(final DTCellValue52 dcv) {
        switch (dcv.getDataType()) {
        case BOOLEAN:
            Boolean booleanValue = dcv.getBooleanValue();
            return (booleanValue == null ? null : booleanValue.toString());
        case DATE:
            Date dateValue = dcv.getDateValue();
            return (dateValue == null ? null : format.format(dcv.getDateValue()));
        case NUMERIC:
            BigDecimal numericValue = (BigDecimal) dcv.getNumericValue();
            return (numericValue == null ? null : numericValue.toPlainString());
        case NUMERIC_BIGDECIMAL:
            BigDecimal bigDecimalValue = (BigDecimal) dcv.getNumericValue();
            return (bigDecimalValue == null ? null : bigDecimalValue.toPlainString());
        case NUMERIC_BIGINTEGER:
            BigInteger bigIntegerValue = (BigInteger) dcv.getNumericValue();
            return (bigIntegerValue == null ? null : bigIntegerValue.toString());
        case NUMERIC_BYTE:
            Byte byteValue = (Byte) dcv.getNumericValue();
            return (byteValue == null ? null : byteValue.toString());
        case NUMERIC_DOUBLE:
            Double doubleValue = (Double) dcv.getNumericValue();
            return (doubleValue == null ? null : doubleValue.toString());
        case NUMERIC_FLOAT:
            Float floatValue = (Float) dcv.getNumericValue();
            return (floatValue == null ? null : floatValue.toString());
        case NUMERIC_INTEGER:
            Integer integerValue = (Integer) dcv.getNumericValue();
            return (integerValue == null ? null : integerValue.toString());
        case NUMERIC_LONG:
            Long longValue = (Long) dcv.getNumericValue();
            return (longValue == null ? null : longValue.toString());
        case NUMERIC_SHORT:
            Short shortValue = (Short) dcv.getNumericValue();
            return (shortValue == null ? null : shortValue.toString());
        default:
            return dcv.getStringValue();
        }
    }

}