001/*===================================================================================
002 *                    Copyright(c) 2012 POSCO ICT
003 *                           
004 * Project            : glue-master-access
005 * Source File Name   : com.poscoict.app.glue.master.access.type.PosRuleValueInfo.java
006 * Description        : 
007 * Author             : 허두녕
008 * Version            : 1.0.0
009 * File Name related  :
010 * Class Name related :
011 * Created Date       : 2012. 12. 14.
012 * Updated Date       : 2012. 12. 14.
013 * Last modifier      : 허두녕
014 * Updated content    : 최초작성
015 * 
016 *==================================================================================*/
017package com.poscoict.app.glue.master.access.type;
018
019import java.util.ArrayList;
020import java.util.LinkedHashMap;
021import java.util.List;
022import java.util.Map;
023
024import com.poscoict.app.glue.master.access.exception.PosMasterDataException;
025
026/**
027 * PosRuleValueInfo.java
028 * 
029 * @author 허두녕
030 * @version 1.0.0
031 * @since 2012. 12. 14.
032 */
033public class PosRuleValueInfo extends ArrayList<LinkedHashMap<String, String>> {
034    private static final long serialVersionUID = 866898289494226942L;
035
036    private String m_headerInfo;
037    private final List<String> m_itemIDList;
038
039    /**
040     * 생성자
041     */
042    public PosRuleValueInfo( List<String> itemIDList ) {
043        this.m_itemIDList = itemIDList;
044    }
045
046    /**
047     * 마스터 헤더 정보를 반환한다.
048     * 
049     * @return 마스터 헤더 정보
050     */
051    public String getHeaderInfo() {
052        return m_headerInfo;
053    }
054
055    /**
056     * 마스터 헤더 정보를 설정한다.
057     * 
058     * @param headerInfo 마스터 헤더 정보
059     */
060    public void setHeaderInfo( String headerInfo ) {
061        this.m_headerInfo = headerInfo;
062    }
063
064    /**
065     * 업무기준 항목ID 목록을 반환한다.
066     * 
067     * @return 항목ID 목록
068     */
069    public List<String> getItemIDList() {
070        return m_itemIDList;
071    }
072
073    /**
074     * 업무기준 모든 결과를 반환한다.
075     * 
076     * @return 업무기준 결과 (List<LinkedHashMap<항목ID, 결과값>>)
077     */
078    public List<LinkedHashMap<String, String>> getRuleResultAll() {
079        return this;
080    }
081
082    /**
083     * 업무기준 결과를 추가한다.
084     * 
085     * @param ruleValueList 결과값 목록
086     */
087    public void addRuleResult( List<String> ruleValueList ) {
088        if ( m_itemIDList.size() == ruleValueList.size() ) {
089            LinkedHashMap<String, String> ruleValueMap = new LinkedHashMap<String, String>( m_itemIDList.size() );
090            for ( int i = 0; i < m_itemIDList.size(); i++ ) {
091                ruleValueMap.put( m_itemIDList.get( i ), ruleValueList.get( i ) );
092            }
093            this.add( ruleValueMap );
094        } else {
095            throw new PosMasterDataException( "Does not match size!! ItemID[" + m_itemIDList.size() + "] != Result[" + ruleValueList.size()
096                    + "]" );
097        }
098    }
099
100    /**
101     * 순서에 해당하는 업무기준 결과를 반환한다.
102     * 
103     * @param index 순서
104     * @return 업무기준 결과 (배열)
105     */
106    public String[] getRuleResult( int index ) {
107        if ( ( index < this.size() ) && ( index >= 0 ) ) {
108            return this.getRuleResultMap( index ).values().toArray( new String[] {} );
109        } else {
110            throw new PosMasterDataException( "Index[" + index + "] must be less than Size[" + this.size() + "]" );
111        }
112    }
113
114    /**
115     * 순서에 해당하는 업무기준 결과를 반환한다.
116     * 
117     * @param index 순서
118     * @return 업무기준 결과 (Map<항목ID, 결과값>)
119     */
120    public Map<String, String> getRuleResultMap( int index ) {
121        if ( ( index < this.size() ) && ( index >= 0 ) ) {
122            return this.get( index );
123        } else {
124            throw new PosMasterDataException( "Index[" + index + "] must be less than Size[" + this.size() + "]" );
125        }
126    }
127
128    /*
129     * (non-Javadoc)
130     * @see java.lang.Object#toString()
131     */
132    @Override
133    public String toString() {
134        StringBuilder sb = new StringBuilder();
135        sb.append( "=== Header Information ===" ).append( "\n" );
136        sb.append( m_headerInfo ).append( "\n" );
137        sb.append( "=== Business Rule Information ===" ).append( "\n" );
138
139        for ( Map<String, String> resultMap : this ) {
140            sb.append( resultMap ).append( "\n" );
141        }
142
143        return sb.toString();
144    }
145}