Package clips.directory.editors.checkUpType

Source Code of clips.directory.editors.checkUpType.PanelCheckupTypeList

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package clips.directory.editors.checkUpType;

import cli_fmw.utils.CheckComboEditor;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import cli_fmw.main.PageContainer;
import cli_fmw.utils.ErrorValue;
import cli_fmw.utils.sorted_table.SortedTable;
import cli_fmw.utils.sorted_table.renderer.LabelRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.CollectionRenderer;
import clips.delegate.directory.filtered.DirectoryCheckupType;
import clips.delegate.directory.filtered.DirectoryCheckupTypeItem;
import clips.delegate.directory.simple.speciality.DirectorySpeciality;
import clips.delegate.directory.simple.speciality.DirectorySpecialityItem;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTable;

/**
*
* @author vip
*/
public class PanelCheckupTypeList extends PanelCheckupTypeListAbstract{

    private DirectorySpeciality directorySpeciality;

    private static class TableModelCheckupTypesImpl extends TableModelCheckupTypes {

        Map<Integer, Column> map = new HashMap<Integer, Column>();
        DirectorySpeciality ds;
        DirectoryCheckupType dct;

        public TableModelCheckupTypesImpl() throws ClipsException {
            ds = DirectoryLocator.getDirectory(DirectorySpeciality.class, true);
            dct = DirectoryLocator.getDirectory(DirectoryCheckupType.class, true);
            map.put(0, new Column("Тип осмотра", DirectoryCheckupTypeItem.class, false));
            map.put(1, new Column("Доступен для специальности", List.class, true));
        }

        @Override
        protected Map<Integer, Column> getColumnMap() {
            return map;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            DirectoryCheckupTypeItem item = items.get(rowIndex);
            if (columnIndex == 0){
                return item;
            }
            if (columnIndex == 1){
                ArrayList<DirectorySpecialityItem> list = new ArrayList<DirectorySpecialityItem>();
                try{
                    DirectorySpecialityItem[] specs = ds.toArray(new DirectorySpecialityItem[ds.getItems().size()]);
                    for (DirectorySpecialityItem speciality : specs) {
                        if (dct.getFilteredItems(speciality).contains(item)){
                            list.add(speciality);
                        }
                    }
                }catch(ClipsException ce){
                    return new ErrorValue(ce);
                }
//                System.out.println("getValueAt: " + list);
                return list;
            }
            return null;
        }

        private Set<DirectorySpecialityItem> getAvailbleSpecialitys(DirectoryCheckupTypeItem checkupType) throws ClipsException{
            Set<DirectorySpecialityItem> res = new HashSet<DirectorySpecialityItem>();
            DirectorySpecialityItem[] specialitys = ds.toArray(new DirectorySpecialityItem[ds.getItems().size()]);
            for (DirectorySpecialityItem dsi : specialitys) {
                if (dct.getFilteredItems(dsi).contains(checkupType)){
                    res.add(dsi);
                }
            }
            return res;
        }

        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            if (columnIndex == 1){
                Collection<DirectorySpecialityItem> specialitys = (Collection<DirectorySpecialityItem>) aValue;
                try {
                    Set<DirectorySpecialityItem> availbleSpecialitys = getAvailbleSpecialitys(items.get(rowIndex));
                    availbleSpecialitys.removeAll(specialitys);
                    for (DirectorySpecialityItem speciality : availbleSpecialitys) {
                        dct.getFilteredItems(speciality).remove(items.get(rowIndex));
                    }
                    for (DirectorySpecialityItem speciality : specialitys) {
                        dct.getFilteredItems(speciality).append(items.get(rowIndex));
                    }
                } catch (ClipsException ex) {
                    ex.printStackTrace();
                }
            }
//            fireTableCellUpdated(rowIndex, columnIndex);
        }


    }

    public PanelCheckupTypeList(PageContainer container) throws ClipsException {
        super(container, false);
        directorySpeciality = DirectoryLocator.getDirectory(DirectorySpeciality.class);
    }

    @Override
    public String getPageTitle() {
        return "Справочник типов осмотров";
    }

    @Override
    public DelegateLine2 getDelegate() {
        return null;
    }

    @Override
    protected TableModelCheckupTypes createModel() throws ClipsException {
        return new TableModelCheckupTypesImpl();
    }

    @Override
    protected void addRenderAndEditor(final SortedTable tblTypes) throws ClipsException {
        tblTypes.getColumnModel().getColumn(1).setCellRenderer(new CollectionRenderer() {

            @Override
            protected void modifyErrorTableCellRendererComponent(JTable table, Object value, int row, int col) throws ClipsException {
                List<DirectorySpecialityItem> items = (List<DirectorySpecialityItem>) value;
                items.add(directorySpeciality.getNullItem());
                if (items.size() == 1){
                    render().setText("Не определено");
                }else if (directorySpeciality.getItemsList().containsAll(items)
                        && items.containsAll(directorySpeciality.getItemsList())){
                    render().setText("Доступно всем");
                }else{
                    items.remove(directorySpeciality.getNullItem());
                    super.modifyErrorTableCellRendererComponent(table, value, row, col);
                }
            }
        });

        DefaultComboBoxModel model = new DefaultComboBoxModel(DirectoryLocator.getDirectory(DirectorySpeciality.class).toArray(false));
        CheckComboEditor editor = new CheckComboEditor(model);
        tblTypes.getColumnModel().getColumn(1).setCellEditor(editor);
    }


}
TOP

Related Classes of clips.directory.editors.checkUpType.PanelCheckupTypeList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.