/* * Copyright 2014 JBoss, by Red Hat, 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.jbpm.formModeler.panels.modeler.backend.indexing; import org.apache.commons.lang3.StringUtils; import org.jbpm.formModeler.api.model.DataFieldHolder; import org.jbpm.formModeler.api.model.DataHolder; import org.jbpm.formModeler.api.model.Field; import org.jbpm.formModeler.api.model.FieldType; import org.jbpm.formModeler.api.model.Form; import org.kie.workbench.common.services.refactoring.backend.server.impact.ResourceReferenceCollector; import org.kie.workbench.common.services.refactoring.model.index.Resource; import org.kie.workbench.common.services.refactoring.model.index.ResourceReference; import org.kie.workbench.common.services.refactoring.service.PartType; import org.kie.workbench.common.services.refactoring.service.ResourceType; import org.uberfire.commons.validation.PortablePreconditions; public class FormIndexVisitor extends ResourceReferenceCollector { private final Form form; public FormIndexVisitor(Form form) { this.form = PortablePreconditions.checkNotNull("form", form); } public void visit() { visit(form); } protected void visit(Form form) { Resource res = addResource(form.getName(), ResourceType.FORM); for (Field field : form.getFormFields()) { visit(field, res); } for (DataHolder dataHolder : form.getHolders()) { visit(dataHolder); } } protected void visit(DataHolder dataHolder) { String className = dataHolder.getClassName(); ResourceReference resRef = null; // it's apparently possible for the class name to be null! // See org.jbpm.formModeler.core.model.BasicTypeDataHolder.getClassName() if (className != null) { resRef = addResourceReference(dataHolder.getClassName(), ResourceType.JAVA); if (dataHolder.canHaveChildren()) { for (DataFieldHolder field : dataHolder.getFieldHolders()) { if (form.isFieldBinded(dataHolder, field.getId())) { resRef.addPartReference(field.getId(), PartType.FIELD); addResourceReference(field.getClassName(), ResourceType.JAVA); } } } } } protected void visit(Field field, Resource res) { DataHolder holder = field.getForm().getDataHolderByField(field); res.addPart(field.getFieldName(), PartType.FORM_FIELD); if (holder != null) { if (holder.canHaveChildren()) { String bindingExpression = StringUtils.defaultIfEmpty(field.getInputBinding(), field.getOutputBinding()); int slash = bindingExpression.indexOf("/"); String holderFieldId = bindingExpression.substring(slash + 1); DataFieldHolder holderField = holder.getDataFieldHolderById(holderFieldId); if (holderField != null) { addResourceReference(holderField.getClassName(), ResourceType.JAVA); } else { // any references to parts or other resources here? } } } else { FieldType type = field.getFieldType(); if (type != null) { String fieldClass = type.getFieldClass(); if (fieldClass != null && !fieldClass.isEmpty()) { addResourceReference(fieldClass, ResourceType.JAVA); } } else { // empty type.. do we do anything here? } } if (!StringUtils.isEmpty(field.getDefaultSubform())) { addResourceReference(field.getDefaultSubform(), ResourceType.FORM); } if (!StringUtils.isEmpty(field.getPreviewSubform())) { addResourceReference(field.getDefaultSubform(), ResourceType.FORM); } if (!StringUtils.isEmpty(field.getTableSubform())) { addResourceReference(field.getDefaultSubform(), ResourceType.FORM); } } }