Subversion Repositories SmartDukaan

Rev

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

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

import in.shop2020.metamodel.core.Feature;
import in.shop2020.metamodel.core.Slide;
import in.shop2020.metamodel.definitions.Catalog;
import in.shop2020.metamodel.definitions.DefinitionsContainer;
import in.shop2020.metamodel.definitions.SlideDefinition;

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

/**
 * Utility class that supports core Slide class. All related 
 * objects are fetched from database and aggregated here.
 * 
 * @author naveen
 *
 */
public class ExpandedSlide extends Slide {
        /**
         * Expanded from SlideDefinition ID
         */
        private SlideDefinition slideDefinition;
        
        /**
         * Expanded from list of children Slide IDs
         */
        private List<ExpandedSlide> expandedChildrenSlides;

        /**
         * Expanded from Feature objects, Map for faster lookups
         */
        private Map<Long, ExpandedFeature> expandedFeatures;

        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        /**
         * Takes Slide object as input and converts all references 
         * into corresponding detail objects
         * 
         * @param slide
         * @throws Exception
         */
        public ExpandedSlide(Slide slide) throws Exception {
                super(slide.getSlideDefinitionID());
                
                // Copy rest of the properties
                super.setChildrenSlides(slide.getChildrenSlides());
                super.setFeatures(slide.getFeatures());
                super.setFreeformContent(slide.getFreeformContent());
                //super.setBorrowedCategoryID(slide.getBorrowedCategoryID());
                
                // Expand slide definition id
                DefinitionsContainer defs = 
                        Catalog.getInstance().getDefinitionsContainer();
                
                this.slideDefinition = 
                        defs.getSlideDefinition(slide.getSlideDefinitionID());
                
                // Expand children slides
                List<Slide> childrenSlides = slide.getChildrenSlides();
                if(childrenSlides != null) {
                        this.expandedChildrenSlides = new ArrayList<ExpandedSlide>();
                        
                        for(Slide childSlide : childrenSlides) {
                                ExpandedSlide expChildSlide = new ExpandedSlide(childSlide);
                                
                                this.expandedChildrenSlides.add(expChildSlide);
                        }
                }
                
                // Expand features
                List<Feature> features = slide.getFeatures();
                if(features != null) {
                        this.expandedFeatures = new LinkedHashMap<Long, ExpandedFeature>();

                        for(Feature feature : features) {
                                ExpandedFeature expFeature = new ExpandedFeature(feature);
                                
                                this.expandedFeatures.put(expFeature.getFeatureDefinitionID(), expFeature);
                        }
                }
        }

        /**
         * @return the slideDefinition Slide Definition object
         */
        public SlideDefinition getSlideDefinition() {
                return slideDefinition;
        }

        /**
         * @return the expandedChildrenSlides List of children ExpandedSlide objects
         */
        public List<ExpandedSlide> getExpandedChildrenSlides() {
                return expandedChildrenSlides;
        }

        /**
         * @return the expandedFeatures
         */
        public List<ExpandedFeature> getExpandedFeatures() {
            if (expandedFeatures == null) {
                return null;
            }

                return new ArrayList<ExpandedFeature>(expandedFeatures.values());
        }

    /**
     * @param featureId id of the given feature to be looked up in the slide
     * @return the expandedFeature 
     */
    public ExpandedFeature getExpandedFeature(long featureId) {
        return expandedFeatures.get(featureId);
    }

        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
                return "ExpandedSlide [expandedChildrenSlides="
                                + expandedChildrenSlides + ", expandedFeatures="
                                + expandedFeatures + ", slideDefinition=" + slideDefinition
                                + ", toString()=" + super.toString() + "]";
        }
}