package org.flowerplatform.codesync.code.javascript.config.changes_processor;
import java.util.List;
import org.flowerplatform.codesync.code.javascript.config.JavaScriptDescriptors;
import org.flowerplatform.codesync.config.extension.NamedElementFeatureAccessExtension;
import org.flowerplatform.codesync.remote.CodeSyncOperationsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.crispico.flower.mp.model.codesync.CodeSyncElement;
import com.crispico.flower.mp.model.codesync.Relation;
/**
* @author Cristian Spiescu
*/
public class AttributeWithRequireEntryDependencyProcessor extends RequireEntryDependencyProcessor {
private final static Logger logger = LoggerFactory.getLogger(AttributeWithRequireEntryDependencyProcessor.class);
public AttributeWithRequireEntryDependencyProcessor(String prefix) {
super(prefix);
}
/**
* @author Cristina Constantinescu
*/
public AttributeWithRequireEntryDependencyProcessor(String prefix, boolean ignoreTargetNameFromDependencyPath, String[] ignoreTypesFromDependencyPath) {
super(prefix, ignoreTargetNameFromDependencyPath, ignoreTypesFromDependencyPath);
}
@Override
protected void updateSource(Relation relation, CodeSyncElement sourceAttribute, CodeSyncElement targetClass) {
// set the attribute value
String className = (String) CodeSyncOperationsService.getInstance().getFeatureValue(targetClass, JavaScriptDescriptors.FEATURE_NAME);
if (logger.isDebugEnabled()) {
logger.debug("For attribute = {}, setting default value = {}", sourceAttribute, className);
}
CodeSyncOperationsService.getInstance().setFeatureValue(sourceAttribute, JavaScriptDescriptors.FEATURE_DEFAULT_VALUE, className);
CodeSyncElement parentClassOfSourceAttribute = (CodeSyncElement) sourceAttribute.eContainer(); // TODO CS/JS: access parent through CSOS as well; children as well
addRequireEntryIfNeeded(parentClassOfSourceAttribute, targetClass, className);
addHtmlIdSuffixValueIfNeeded((CodeSyncElement) sourceAttribute.eContainer(), className);
}
protected void addRequireEntryIfNeeded(CodeSyncElement hostForRequireEntry, CodeSyncElement targetClass, String className) {
// look for a require entry; if not found, create one
boolean foundCorrespondingRequiresEntry = CodeSyncOperationsService.getInstance().hasChildWithKeyFeatureValue(
hostForRequireEntry, JavaScriptDescriptors.TYPE_REQUIRE_ENTRY, className);
if (!foundCorrespondingRequiresEntry) {
CodeSyncElement requireEntry = CodeSyncOperationsService.getInstance().create(JavaScriptDescriptors.TYPE_REQUIRE_ENTRY);
updateRequireEntry(requireEntry, targetClass);
CodeSyncOperationsService.getInstance().add(hostForRequireEntry, requireEntry);
}
}
}