Subversion Repositories SmartDukaan

Rev

Rev 3314 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.metamodel.util;

import java.util.List;

import in.shop2020.metamodel.core.Bullet;
import in.shop2020.metamodel.core.CompositeDataObject;
import in.shop2020.metamodel.core.EnumDataObject;
import in.shop2020.metamodel.core.PrimitiveDataObject;
import in.shop2020.metamodel.definitions.BulletDefinition;
import in.shop2020.metamodel.definitions.Catalog;
import in.shop2020.metamodel.definitions.CompositeDefinition;
import in.shop2020.metamodel.definitions.DefinitionsContainer;
import in.shop2020.metamodel.definitions.EnumValue;
import in.shop2020.metamodel.definitions.Unit;

/**
 * Utility class that supports core Bullet class. All related objects are 
 * fetched from database and aggregated here.
 * 
 * @author naveen
 *
 */
public class ExpandedBullet extends Bullet {
        
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        /**
         * Expanded version of BulletDefinition object
         */
        private ExpandedBulletDefinition expandedBulletDefinition;
        
        /**
         * Expanded version of EnumDataObject
         */
        private ExpandedEnumDataObject expandedEnumDataObject;
        
        /**
         * Expanded unit ID
         */
        private Unit unit;
        
        /**
         * True, if bullet contains shop2020 primitive structured data
         */
        private boolean primitive;
        
        /**
         * True, if bullet contains enumerated type structured data
         */
        private boolean enumerated;
        
        /**
         * True, if bullet contains composite type structured data
         */
        private boolean composite;

        /**
         * Expands references in Bullet object based on BulletDefinition object
         * 
         * @param bullet
         * @param bulletDefinition
         * @throws Exception
         */
        public ExpandedBullet(Bullet bullet, BulletDefinition bulletDefinition) 
                throws Exception {
                super(bullet.getDataObject());
                
                // Copy rest of the properties
                this.setUnitID(bullet.getUnitID());
                super.setFreeformContent(bullet.getFreeformContent());

                this.expandedBulletDefinition = 
                        new ExpandedBulletDefinition(bulletDefinition);

                DefinitionsContainer defs = 
                        Catalog.getInstance().getDefinitionsContainer();
                
                // Expand enum data object
                if(super.getDataObject() instanceof EnumDataObject) {
                        this.enumerated = true;
                        
                        EnumDataObject enumDataObject = 
                                (EnumDataObject)bullet.getDataObject();
                        
                        EnumValue enumValue = 
                                defs.getEnumValue(enumDataObject.getEnumValueID());
                        
                        this.expandedEnumDataObject = new ExpandedEnumDataObject(
                                        enumDataObject, enumValue);
                }
                else if(super.getDataObject() instanceof CompositeDataObject) {
                        this.composite = true;
                }
                else {
                        this.primitive = true;
                }
                
                // Expand unit ID
                if(bullet.getUnitID() != 0L) {
                        this.unit = defs.getUnit(bullet.getUnitID());
                }
        }

        /**
         * @return the expandedEnumDataObject
         */
        public ExpandedEnumDataObject getExpandedEnumDataObject() {
                return expandedEnumDataObject;
        }
        
        /**
         * @return the expandedBulletDefinition
         */
        public ExpandedBulletDefinition getExpandedBulletDefinition() {
                return expandedBulletDefinition;
        }

        /**
         * True, if bullet contains shop2020 primitive structured data
         * 
         * @return the primitive
         */
        public boolean isPrimitive() {
                return primitive;
        }

        /**
         * True, if bullet contains enumerated type structured data
         * 
         * @return the enumerated
         */
        public boolean isEnumerated() {
                return enumerated;
        }

        /**
         * True, if bullet contains composite type structured data
         * 
         * @return the composite
         */
        public boolean isComposite() {
                return composite;
        }

        /**
         * Encapsulates logic to come up with display-able text out of Bullet object
         * 
         * @return String Display-able text
         */
        public String displayText() {
                String displayText = "";
                boolean contentAvailable = true;
                
                // Enumerated
                if(this.isEnumerated()) {
                        displayText = 
                                this.getExpandedEnumDataObject().getEnumValue().getValue();
                }
                
                // Composite
                else if (this.isComposite()) {
                        CompositeDefinition compositeDef = (CompositeDefinition)
                                this.expandedBulletDefinition.getDatatypeDefinition();
                        
                        String separator = compositeDef.getSeparator();
                        separator = " " + separator + " ";
                        List<PrimitiveDataObject> primitivedataobjects = 
                                ((CompositeDataObject)this.getDataObject()
                                                ).getPrimitiveDataObjects();
                        
                        for(int i=0;i<primitivedataobjects.size();i++) {
                                PrimitiveDataObject primitivedataobject = 
                                        primitivedataobjects.get(i);
                                
                                displayText += primitivedataobject.getValue();

                                if(primitivedataobject.getValue().trim().equals("-1")){
                                        contentAvailable = false;       
                                }
                                
                                if(i != (primitivedataobjects.size() - 1)) {
                                        displayText += separator;
                                }
                        }
                        
                        if(this.getUnit() != null) { 
                                displayText += " " + this.getUnit().getShortForm();
                        }
                }
                
                // Primitive
                else {
                        displayText += ((PrimitiveDataObject)this.getDataObject()
                                        ).getValue();

                        if(((PrimitiveDataObject)this.getDataObject()).getValue().trim().equals("-1")){
                                contentAvailable = contentAvailable && false;   
                        }

            if (this.getUnit() != null) {
                                displayText += " " + this.getUnit().getShortForm();
            }
                }

                if(!contentAvailable){
                        displayText = "Not available";
                }

                return displayText;
        }


        /**
         * Encapsulates logic to come up with "value" only part Bullet object
         * 
         * @return String "value" text
         */
        public String getValue() {
                String value = "";
                
                // Enumerated
                if(this.isEnumerated()) {
                        ExpandedEnumDataObject expEnumDO = this.getExpandedEnumDataObject();
                        if(expEnumDO != null) {
                                EnumValue enumVal = expEnumDO.getEnumValue();
                                if (enumVal != null) {
                                        value = enumVal.getValue();
                                }
                        }
                }
                
                // Composite
                else if (this.isComposite()) {
                        CompositeDefinition compositeDef = (CompositeDefinition)
                                this.expandedBulletDefinition.getDatatypeDefinition();
                        
                        String separator = compositeDef.getSeparator();
                        
                        List<PrimitiveDataObject> primitivedataobjects = 
                                ((CompositeDataObject)this.getDataObject()
                                                ).getPrimitiveDataObjects();
                        
                        for(int i=0;i<primitivedataobjects.size();i++) {
                                PrimitiveDataObject primitivedataobject = 
                                        primitivedataobjects.get(i);
                                
                                value += primitivedataobject.getValue();
                                
                                if(i != (primitivedataobjects.size() - 1)) {
                                        value += separator;
                                }
                        }
                }
                
                // Primitive
                else {
                        value += ((PrimitiveDataObject)this.getDataObject()).getValue();
                }
                
                return value;
        }
        
        /**
         * @param unit the unit to set
         */
        public void setUnit(Unit unit) {
                this.unit = unit;
        }

        /**
         * @return the unit
         */
        public Unit getUnit() {
                return unit;
        }

        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
                return "ExpandedBullet [composite=" + composite + ", enumerated="
                                + enumerated + ", expandedBulletDefinition="
                                + expandedBulletDefinition + ", expandedEnumDataObject="
                                + expandedEnumDataObject + ", primitive=" + primitive
                                + ", unit=" + unit + ", getDataObject()=" + getDataObject()
                                + ", getFreeformContent()=" + getFreeformContent() + "]";
        }

}