Subversion Repositories SmartDukaan

Rev

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

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


import in.shop2020.metamodel.util.ReusableMetaModelComponent;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Entity class is the center of shop2020 content meta-model. Represents 
 * a Product that is part of shop2020 online shopping catalog. 
 * 
 * It is composed of other classes in meta-model core package, 
 * classes in meta-model definition package define its structure.
 * 
 * @author naveen
 *
 */
public class Entity extends ReusableMetaModelComponent {
    public Entity() {
        }

        /**
         * This is serial versionId. Need to put corresponding to the svn checkout version. 
         * So that code can be retrieved for the version and Objects can be restored.
         */
        //FIXME to be decided
        private static final long serialVersionUID = 1L;
        
        /**
         * Pointer to entity's category 
         */
        private long categoryID;
        
        /**
         * Manufacturer brand
         */
        private String brand;
        
        /**
         * Manufacturer provided Model Number
         */
        private String modelNumber;
        
        /**
         * Manufacturer provided Model Name
         */
        private String modelName;
        
        /**
         * List of slides that describe the entity
         */
        private List<Slide> slides;

        
        private List<Long> slideSequence;
        
        /**
         * 
         * @param newID Unique identifier
         * @param categoryID Category ID
         */
    public Entity(long newID, long categoryID) {
        super(newID);
        this.categoryID = categoryID;
    }

    public List<Long> getSlideSequence() {
                return slideSequence;
        }

        public void setSlideSequence(List<Long> slideSequence) {
                if(this.slideSequence==null){
                        this.slideSequence = new ArrayList<Long>();
                }
                this.slideSequence = slideSequence;
        }

        /**
     * 
     * @return categoryID
     *     
     */
    public long getCategoryID() {
        return this.categoryID;
    }

    /**
     * 
     * @param value Category ID to set
     *     
     */
    public void setCategoryID(long value) {
        this.categoryID = value;
    }

    /**
     * 
     * @return brand
     *     
     */
    public String getBrand() {
        return this.brand;
    }

    /**
     * 
     * @param value Brand to set
     *     
     */
    public void setBrand(String value) {
        this.brand = value;
    }

    /**
     * 
     * @return modelNumber Model Number 
     *     
     */
    public String getModelNumber() {
        return this.modelNumber;
    }

    /**
     * 
     * @param value Model Number to set
     *     
     */
    public void setModelNumber(String value) {
        this.modelNumber = value;
    }

    /**
     * 
     * @return modelName Model Name
     *     
     */
    public String getModelName() {
        return this.modelName;
    }

    /**
     * 
     * @param value Model Name to set
     *     
     */
    public void setModelName(String value) {
        this.modelName = value;
    }

    /**
     * 
     * @return slides
     *     
     */
    public List<Slide> getSlides() {
        return this.slides;
    }
    
    /**
     * 
     * @param slide to add new slides to an entity
     */
    public void addSlide(Slide slide) {
        if(this.slides == null) {
                this.slides = new ArrayList<Slide>();
        }
        else {
                Slide currentSlide = this.getSlide(slide.getSlideDefinitionID());
                this.slides.remove(currentSlide);
        }
        
        this.slides.add(slide);
    }
    
    /**
     * 
     * @param slideIDsNewOrder
     */
    public void reorderSlides(List<Long> slideIDsNewOrder) {
        if(this.slides == null) {
                return;
        }
        
        Map<Long, Slide> slideIDSlide = new HashMap<Long, Slide>();
        
        for(Slide slide : this.slides) {
                slideIDSlide.put(new Long(slide.getSlideDefinitionID()), slide);
        }
        
        List<Slide> orderedSlides = new ArrayList<Slide>();
        for(Long slideID : slideIDsNewOrder) {
                Slide slide = slideIDSlide.get(slideID);
                
                if(slide != null) {
                        orderedSlides.add(slide);
                }
        }
        
        this.slides = orderedSlides;
    }
    
    /**
     * 
     * @param slideDefinitionID
     */
    public void removeSlide(long slideDefinitionID) {
        if(this.slides != null) {
                Slide slide = this.getSlide(slideDefinitionID);
                if(slide != null) {
                        this.slides.remove(slide);
                }
        }
    }
    
    /**
     * 
     * @param value list of slides to set
     *     
     */
    public void setSlides(List<Slide> value) {
        this.slides = value;
    }

        /**
         * Returns ExpandedSlide instance given slide definition ID
         * @param slideDefinitionID
         * @return ExpandedSlide 
         */
        public Slide getSlide(long slideDefinitionID) {
                if(this.slides!=null){
                        for(Slide slide : this.slides) {
                                if(slide.getSlideDefinitionID() == slideDefinitionID) {
                                        return slide;
                                }
                        }
                }               
                return null;
        }
        
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + (int) (this.getID() ^ (this.getID() >>> 32));
                return result;
        }

        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
                return this.getID() == ((Entity)obj).getID();
        }

        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
                return "Entity [brand=" + brand + ", categoryID=" + categoryID
                                + ", modelName=" + modelName + ", modelNumber=" + modelNumber
                                + ", slideSequence=" + slideSequence
                                + ", slides=" + slides + ", getID()=" + getID() + "]";
        }
   
}