com.googlecode.androidcartridge.metafacades.db.AndroidEntityFacadeLogicImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.googlecode.androidcartridge.metafacades.db.AndroidEntityFacadeLogicImpl.java

Source

// license-header java merge-point
//
// Generated by: MetafacadeLogicImpl.vsl in andromda-meta-cartridge.
package com.googlecode.androidcartridge.metafacades.db;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.andromda.metafacades.uml.AssociationEndFacade;
import org.andromda.metafacades.uml.ClassifierFacade;
import org.andromda.metafacades.uml.Entity;
import org.andromda.metafacades.uml.EntityAttribute;
import org.apache.commons.lang.StringUtils;

import com.googlecode.androidcartridge.AndroidProfile;

/**
 * <p>
 * Generates a Dao, a Database and eventually a contentProvider
 * </p>
 * MetafacadeLogic implementation for
 * org.andromda.cartridges.android.metafacades.db.AndroidEntityFacade.
 * 
 * @see org.andromda.cartridges.android.metafacades.db.AndroidEntityFacade
 */
public class AndroidEntityFacadeLogicImpl extends AndroidEntityFacadeLogic {

    /**
     * 
     */
    private static final long serialVersionUID = -7784231194776315706L;

    /**
     * Public constructor for AndroidEntityFacadeLogicImpl
     * 
     * @see org.andromda.cartridges.android.metafacades.db.AndroidEntityFacade
     */
    public AndroidEntityFacadeLogicImpl(final Object metaObject, final String context) {
        super(metaObject, context);
    }

    /*
     * Returns a map of ForeignKeyName - AssociationEndFacade
     * 
     * @return
     */
    private Map<String, AssociationEndFacade> getFKNameAssociationEndMap() {
        Map<String, AssociationEndFacade> fkNames = new HashMap<String, AssociationEndFacade>();
        List<AssociationEndFacade> associationEnds = getAssociationEnds();
        for (AssociationEndFacade associationEndFacade : associationEnds) {
            boolean needFk = associationEndFacade.isMany2One() || (associationEndFacade.isOne2One()
                    && (associationEndFacade.isAggregation() || associationEndFacade.isComposition()));
            if (needFk) {
                AssociationEndFacade otherEnd = associationEndFacade.getOtherEnd();
                ClassifierFacade type = otherEnd.getType();
                if (type instanceof Entity) {
                    String fkName = "FK_" + ((Entity) type).getTableName() + "_" + otherEnd.getName();
                    fkNames.put(fkName, associationEndFacade);
                }
            }
        }
        return fkNames;
    }

    @Override
    protected AssociationEndFacade handleGetAssociationEnd(final String foreignKeyName) {
        return getFKNameAssociationEndMap().get(foreignKeyName);
    }

    @Override
    protected String handleGetContentPath(final boolean withIdentifiers, final boolean withNames) {
        // if!externalIdentifiers
        StringBuilder result = new StringBuilder("/");
        String baseName = getContentSegment();
        result.append(baseName);
        if (withIdentifiers) {
            Collection<EntityAttribute> identifiers = getIdentifiers();
            for (EntityAttribute entityAttribute : identifiers) {
                result.append("/");
                if (withNames) {
                    result.append("{");
                    result.append(entityAttribute.getName());
                    result.append("}");
                } else {
                    if (entityAttribute.getSqlType().equals("INTEGER")) {
                        result.append("#");
                    } else {
                        result.append("*");
                    }
                }
            }
        }

        return result.toString();
    }

    /**
     * 
     * @see org.andromda.cartridges.android.metafacades.db.AndroidEntityFacade#getContentProvider()
     */
    @Override
    protected Object handleGetContentProvider() {
        // TODO add your implementation here!
        return null;
    }

    @Override
    protected String handleGetContentSegment() {
        String baseName = (String) this.findTaggedValue(AndroidProfile.VALUE_CONTENT_PATH_SEGMENT);
        if (StringUtils.isBlank(baseName)) {
            baseName = getName().toLowerCase();
        }
        return baseName;
    }

    @Override
    protected Collection<String> handleGetExternalIdentifiersColumnNames() {
        Set<String> result = new LinkedHashSet<String>();
        Collection<AssociationEndFacade> externalIds = getFKNameAssociationEndMap().values();
        for (AssociationEndFacade associationEndFacade : externalIds) {
            AssociationEndFacade otherEnd = associationEndFacade.getOtherEnd();
            ClassifierFacade type = otherEnd.getType();
            if (type instanceof Entity) {
                Entity refEntity = ((Entity) type);
                for (EntityAttribute identifier : refEntity.getIdentifiers()) {
                    String columnName = getColumnName(otherEnd, refEntity, identifier);
                    result.add(columnName);
                }
            }
        }
        return result;
    }

    private String getColumnName(AssociationEndFacade otherEnd, Entity refEntity, EntityAttribute identifier) {
        String prefix = (StringUtils.isBlank(otherEnd.getName()) ? refEntity.getName().toUpperCase()
                : otherEnd.getName().toUpperCase()) + "_";
        String columnName = prefix + identifier.getColumnName();
        return columnName;
    }

    @Override
    protected String handleGetExternalIdentifierSqlType(final String externalId) {
        String result = null;
        Collection<AssociationEndFacade> externalIds = getFKNameAssociationEndMap().values();
        found: for (AssociationEndFacade associationEndFacade : externalIds) {
            AssociationEndFacade otherEnd = associationEndFacade.getOtherEnd();
            ClassifierFacade type = otherEnd.getType();
            if (type instanceof Entity) {
                Entity refEntity = ((Entity) type);
                for (EntityAttribute identifier : refEntity.getIdentifiers()) {
                    String idCalcName = getColumnName(otherEnd, refEntity, identifier);
                    if (idCalcName.equals(externalId)) {
                        result = identifier.getSqlType();
                        break found;
                    }
                }
            }
        }
        return result;
    }

    @Override
    protected Collection<String> handleGetForeignKeyNames() {
        return getFKNameAssociationEndMap().keySet();
    }

    @Override
    protected String handleGetIdentifierColumnList() {
        Collection<EntityAttribute> identifiers = getIdentifiers();
        Collection<String> names = new ArrayList<String>();
        for (EntityAttribute identifier : identifiers) {
            names.add(identifier.getColumnName());
        }
        return StringUtils.join(names, ",");
    }

    @Override
    protected Integer handleGetIdentifierPositionInContentURI(final String identifier) {
        String contentPath = getContentPath(true, true);
        int position = contentPath.lastIndexOf(identifier);
        Integer result;
        if (position > 0) {
            String trimmedPath = contentPath.substring(0, position);
            result = StringUtils.countMatches(trimmedPath, "/");
        } else {
            result = -1;
        }
        return result;
    }

    /**
     * 
     * @see org.andromda.cartridges.android.metafacades.db.AndroidEntityFacade#isHasContentProvider()
     */
    @Override
    protected boolean handleIsHasContentProvider() {
        // TODO put your implementation here.
        return false;
    }

    @Override
    protected boolean handleIsSimplePrimaryKey() {
        Collection<EntityAttribute> identifiers = getIdentifiers();
        return identifiers.size() == 1;
    }

    @Override
    public String getFullyQualifiedIdentifierTypeName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getIdentifierGetterName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getIdentifierName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getIdentifierSetterName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getIdentifierTypeName() {
        // TODO Auto-generated method stub
        return null;
    }

}