All pastes #740878 Raw Edit

Untitled

public text v1 · immutable
·published 2007-10-18 09:52 UTC
rendered paste body
package ARMfz;

import jado.DataSource;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import niiaa.SpravkaSQL.Storage.Storage;
import niiaa.plugin.PluginFrame;
import card.ZakazEtapCard;
import dedFactory.dedFactory;
import fzgui.TM_Filt;
import fzgui.TM_Fish;
//TODO после применения BoxLayout стало ясно что это сама карточка стремится занять все место - пофиксить
//TODO переместить карточку в верхний левый угол, посмотреть что мишка сказал сделать
//TODO хранилище XML в отчете неверно расписано - там не четыре части, видимых из редактора PL\SQL объектов, а 1 xml-ник в блобе (ц) вован
public class ReportsAE2 extends JPanel
{
	/**
	 * 
	 */
	private static final long	serialVersionUID	= 1L;
	JTabbedPane					tabPane				= null;
	JTabbedPane					oneTabPane			= null;
	JList						f_allZak			= null;
	JList						f_allZakFirst		= null;
	JList						f_filt				= null;
	JTable						jt					= null;
	JTable						jt2					= null;
	JTable						jtfish				= null;
	JComboBox					filSelCb			= null;
	JComboBox					filEdCb				= null;
	JTextField					filEdTf				= null;
	DataSource					ds					= null;
	ZakazEtapCard				card				= null;
	PluginFrame					parent				= null;

	public ReportsAE2()
	{
		super(new BorderLayout());
		tabPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
		add(tabPane, BorderLayout.CENTER);
		tabPane.addTab("Основное окно", firstTab());
		tabPane.addTab("Настройки фильтров", filtersTab());
	}

	public ReportsAE2(DataSource data, PluginFrame parentFrame)
	{
		super(new BorderLayout());
		parent = parentFrame;
		ds = data;
		tabPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
		add(tabPane, BorderLayout.CENTER);
		tabPane.addTab("Основное окно", firstTab());
		tabPane.addTab("Настройки фильтров", filtersTab());
	}

	private JPanel firstTab()
	{
		JPanel res = new JPanel(new BorderLayout());

		oneTabPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
		oneTabPane.addTab("со СЦ", one_oneTab());
		oneTabPane.addTab("с квартальным планом", one_twoTab());
		// oneTabPane.addTab("с фисксир.",one_threeTab());
		f_allZakFirst = new JList();

		res.add(dedFactory.createStandartJSplit(JSplitPane.HORIZONTAL_SPLIT, dedFactory.createBorderedPanel("Заказы", f_allZakFirst), dedFactory.createBorderedPanel("Сравнение", oneTabPane)), BorderLayout.CENTER);
		return res;
	}

	private JPanel one_oneTab()
	{
		JPanel res = new JPanel();
		Storage stor = new Storage(ds, "TEST");
		try
		{
			stor.addColumn("\"Заказ\".\"Заказ\"", "Заказ");
			stor.addColumn("\"Заказ\".\"Заказчик\"", "Заказчик");
			// stor.getDataContainer().setData(col, row, obj)
		} catch (Exception e1)
		{
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		stor.getL1s().setMain(stor.getDataSource().findTabByName("Заказ"));
		res.add(stor.createGUI(parent, Storage.PanelMode));
		try
		{
			stor.receveData(Storage.modeWithApplyData);
			stor.getMainWindow().refresh();
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return res;
	}

	private JPanel one_twoTab()
	{
		JPanel res = new JPanel();
		jtfish = new JTable(new TM_Fish());
		res.add(new JScrollPane(dedFactory.createSimpleTable(CreateFishData())), BorderLayout.CENTER);
		return res;
	}

	private JPanel one_threeTab()
	{
		JPanel res = new JPanel();
		return res;
	}

	/**
	 *	Закладка с настройками фильтров (пользователь редактирует список фильтров и видит списки заказов и карточку по каждому заказу)
	 */
	private JPanel filtersTab()
	{
		JPanel pan = new JPanel(new BorderLayout());
		JPanel pan2 = new JPanel(new BorderLayout());
		/** Листики и кнопочки */
		f_filt = dedFactory.createJList(testData());
		pan2.add(FiltEditNum(), BorderLayout.CENTER);
		pan2.add(dedFactory.createBorderedPanel("Фильтры", f_filt), BorderLayout.EAST);
		jt = new JTable(new TM_Filt(createTableData(0), ds));

		f_allZak = dedFactory.createJList(((TM_Filt) jt.getModel()).getZaks());

		jt2 = dedFactory.createSimpleTable(createTableData(1));
		card = new ZakazEtapCard(ds);
		//TODO вместо этого тупого трая здесь вроде бы должен быть код, который возьмет первый элемент списка заказов и по нему выберет карточку заказ-этапа
		/*
		try
		{
			
			card.updt("", "", null);
		} catch (Exception e1)
		{
			e1.printStackTrace();
		}
		*/
		
	
		
		
		
		
		f_allZak.addListSelectionListener(new ListSelectionListener()
		{
			public void valueChanged(ListSelectionEvent e)
			{
				try
				{
					card.updt(((TM_Filt) jt.getModel()).getZakId(f_allZak.getSelectedIndex()) + "", "", null);
				} catch (Exception e1)
				{
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}
		});

		JPanel ordersList = dedFactory.createBorderedPanel("Список заказов", f_allZak);
		
		
		JPanel cardPanel = new JPanel();						//список заказов и карточка заказа
		JButton p = new JButton("xx");
		
		p.setAlignmentX(p.LEFT_ALIGNMENT);
		ordersList.setAlignmentX(ordersList.LEFT_ALIGNMENT);
		cardPanel.setAlignmentX(cardPanel.LEFT_ALIGNMENT);
//		
		
		BoxLayout box = new BoxLayout(cardPanel, BoxLayout.Y_AXIS);
		cardPanel.setLayout(box);
		cardPanel.add(ordersList);
//		cardPanel.add(Box.createHorizontalStrut(15));
		cardPanel.add(card.getZakaz());
		cardPanel.add(p);
		
		
		/*
		cardPanel.setLayout(new GridBagLayout());
		GridBagConstraints GBC = new GridBagConstraints();
		GBC.insets = new Insets(0, 10, 10, 5);
		GBC.fill = GridBagConstraints.VERTICAL;
		GBC.gridx = GridBagConstraints.REMAINDER;
		cardPanel.add(card.getZakaz(), GBC);
		*/

//		JPanel orders = new JPanel();
//		orders.setLayout(new BorderLayout());
//		orders.add(ordersList, BorderLayout.NORTH);
//		orders.add(cardPanel, BorderLayout.WEST);
//		
		pan.add(new JScrollPane(jt), BorderLayout.WEST);
//		pan.add(orders, BorderLayout.CENTER);
		pan.add(cardPanel, BorderLayout.CENTER);
		
		
		final JPopupMenu popup = new JPopupMenu("Меню");
		JMenuItem mi1 = new JMenuItem("Добавить");
		mi1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				FilterAddDialog();
			}
		});
		final JMenuItem mi2 = new JMenuItem("Удалить");
		mi2.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				((TM_Filt) jt.getModel()).removeFilter(jt.getSelectedRow());
				f_allZakRefresh();
			}
		});
		popup.add(mi1);
		popup.add(mi2);
		jt.add(popup);
		jt.getSelectionModel().addListSelectionListener(new ListSelectionListener()
		{

			public void valueChanged(ListSelectionEvent e)
			{
				if (e.getFirstIndex() == e.getLastIndex())
					mi2.setEnabled(true);
				else
					mi2.setEnabled(false);
			}

		});

		MouseListener ml = new MouseAdapter()
		{

			public void mouseClicked(MouseEvent e)
			{
				if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() >= 2)
				{
					FilterEditJDialog(((TM_Filt) jt.getModel()).getRowType(jt.getSelectedRow()), ((TM_Filt) jt.getModel()).getRealValueAt(jt.getSelectedRow(), 0).toString(), ((TM_Filt) jt.getModel()).getRealValueAt(jt.getSelectedRow(), 1).toString(), ((TM_Filt) jt.getModel()).getRealValueAt(jt.getSelectedRow(), 2).toString(), jt.getSelectedRow());
				}
				if (e.getButton() == MouseEvent.BUTTON3)
				{
					popup.show(e.getComponent(), e.getX(), e.getY());
				}
			}
		};

//		scr_pane_jt.addMouseListener(ml);

		jt.addMouseListener(ml);

		f_allZakRefresh();
		return pan;
	}

	private void f_allZakRefresh()
	{
		// ((DefaultListModel)f_allZak.getModel()).
		// f_allZak =
		// dedFactory.createJList(((TM_Filt)jt.getModel()).getZaks());
		f_allZak.setModel(dedFactory.createJList(((TM_Filt) jt.getModel()).getZaks()).getModel());
		f_allZak.revalidate();
		ArrayList<String> arr = new ArrayList<String>();
		for (int i = 0; i < f_allZak.getModel().getSize(); i++)
		{
			arr.add(f_allZak.getModel().getElementAt(i).toString());
		}
		f_allZakFirst.setModel(dedFactory.createJList(arr).getModel());
		f_allZakFirst.revalidate();
	}

	private JPanel FiltEditNum()
	{
		SpringLayout sl = new SpringLayout();
		JPanel res = new JPanel(sl);
		JLabel label1;
		JTextField textField1, textField2, textField3;
		JButton button1, button2;
		res.add(label1 = new JLabel("Филтр по полю:"));
		res.add(textField1 = new JTextField("Заказ"));
		res.add(textField2 = new JTextField("Начинается с:"));
		res.add(textField3 = new JTextField("5"));
		res.add(button1 = new JButton("Добавить"));
		res.add(button2 = new JButton("Удалить"));
		sl.putConstraint(SpringLayout.WEST, label1, 5, SpringLayout.WEST, res);
		sl.putConstraint(SpringLayout.WEST, textField1, 5, SpringLayout.EAST, label1);
		sl.putConstraint(SpringLayout.NORTH, textField2, 5, SpringLayout.SOUTH, label1);
		sl.putConstraint(SpringLayout.WEST, textField3, 5, SpringLayout.EAST, textField2);
		sl.putConstraint(SpringLayout.NORTH, textField3, 5, SpringLayout.SOUTH, textField1);
		sl.putConstraint(SpringLayout.NORTH, button1, 5, SpringLayout.SOUTH, textField2);
		sl.putConstraint(SpringLayout.NORTH, button2, 5, SpringLayout.SOUTH, textField3);
		sl.putConstraint(SpringLayout.WEST, button2, 5, SpringLayout.EAST, button1);
		return res;
	}

	private void FilterAddDialog()
	{
		final JPanel pan = new JPanel(new BorderLayout());
		final JDialog window = new JDialog();
		pan.add(filSelCb = new JComboBox(FilterDialogCobmoBoxFill(99)), BorderLayout.NORTH);
		pan.add(filEdCb = new JComboBox(FilterDialogCobmoBoxFill(getFieldType(filSelCb.getSelectedItem().toString()))), BorderLayout.WEST);
		pan.add(filEdTf = new JTextField(""), BorderLayout.CENTER);
		filSelCb.addItemListener(new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				filEdCb.setModel(new DefaultComboBoxModel(FilterDialogCobmoBoxFill(getFieldType(filSelCb.getSelectedItem().toString()))));
				pan.repaint();
			}
		});
		JPanel but = new JPanel();
		JButton add = new JButton("Добавить");
		add.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				((TM_Filt) jt.getModel()).addFilter(filSelCb.getSelectedItem().toString(), filEdCb.getSelectedItem().toString(), filEdTf.getText(), getStringOfType(getFieldType(filSelCb.getSelectedItem().toString())));
				f_allZakRefresh();
				window.dispose();
			}
		});
		but.add(add);
		JButton can = new JButton("Отмена");
		can.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				f_allZakRefresh();
				window.dispose();
			}
		});
		but.add(can);
		pan.add(but, BorderLayout.SOUTH);
		window.add(pan);
		window.pack();
		window.setVisible(true);
	}

	private String[] FilterDialogCobmoBoxFill(int type)
	{
		String[] data = null;
		switch (type)
		{
			case 0:
			{
				data = new String[]
				{
						"Начинается с", "Заканчивается на", "Содержит",
						// "Длинной в",
						"Длинна =", "Длинна >", "Длинна <", "Равно"
				};
				break;
			}
			case 1:
			{
				data = new String[]
				{
						"Начинается с", "Заканчивается на", "Содержит", "Длинной в", "Больше", "Меньше"
				};
				break;
			}
			case 2:
			{
				data = new String[]
				{
						"Больше", "Меньше", "Равно"
				};
				break;
			}
			case 99:
			{
				data = new String[]
				{
						"Заказ", "Номер договора", "Дата подписания заказа", "Руководитель темы", "Дата подписания соглашения", "Заказчик", "Номер секретного дела", "Тема", "Содержание работ", "Номер несекретного дела", "Окончание работ по договору", "Процент аванса", "Исполнитель", "Вид финансирования", "Дата начала работ по договору",
						"Дата конца работ по договору", "Вид работ", "Номер доп.соглаш.", "Дата актуализации", "Дата деактуализации", "Номер изменения", "Основание", "Дата подписания договора", "Дата подписания доп.соглаш.", "Дата списания", "Приоритет", "Дог. или доп.соглаш.", "Срок договора"
				};
				break;
			}
			default:
			{
				data = new String[]
				{
					"Undefined"
				};
			}
		}
		return data;
	}

	private String getStringOfType(int type)
	{
		if (type == 0)
		{
			return "String";
		}
		if (type == 1)
		{
			return "Integer";
		}
		if (type == 2)
		{
			return "Date";
		}
		return "String";
	}

	private int getFieldType(String field)
	{
		if (field.equals("Заказ") || field.equals("Номер договора") || field.equals("Руководитель темы") || field.equals("Заказчик") || field.equals("Номер серкетного дела") || field.equals("Тема") || field.equals("Содержание работ") || field.equals("Номер несекретного дела") || field.equals("Окончание работ по договору") || field.equals("Исполнитель")
				|| field.equals("Вид финансирования") || field.equals("Вид работ") || field.equals("Номер доп.соглаш.") || field.equals("Приоритет") || field.equals("Дог. или доп. соглаш"))
		{
			return 0;
		}
		if (field.equals("Процент аванса") || field.equals("Номер изменения"))
		{
			return 1;
		}
		if (field.equals("Дата подписания заказа") || field.equals("Дата подписания соглашения") || field.equals("Дата начала работ по договору") || field.equals("Дата конца работ по договору") || field.equals("Дата актуализации") || field.equals("Дата деактуализации") || field.equals("Дата подписания договора")
				|| field.equals("Дата подписания доп. соглаш.") || field.equals("Дата списания") || field.equals("Срок договора"))
		{
			return 2;
		}
		return 0;
	}

	private void FilterEditJDialog(final int type, final String field, String usl, String val, final int row)
	{
		final JDialog window = new JDialog();
		String[] data = FilterDialogCobmoBoxFill(type);
		JPanel pan = new JPanel(new BorderLayout());
		pan.add(filEdCb = new JComboBox(data), BorderLayout.WEST);
		if (!(usl == null || usl.equals("")))
		{
			for (int i = 0; i < filEdCb.getModel().getSize(); i++)
			{
				if (filEdCb.getModel().getElementAt(i).equals(usl))
				{
					filEdCb.setSelectedIndex(i);
					break;
				}
			}
		}
		pan.add(filEdTf = new JTextField(val), BorderLayout.CENTER);
		JPanel opt = new JPanel();
		JButton ch = new JButton("Заменить");
		ch.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if (type == 0)
				{
					((TM_Filt) jt.getModel()).changeFilter(row, field, filEdCb.getSelectedItem().toString(), filEdTf.getText(), "String");
				} else if (type == 1)
				{
					((TM_Filt) jt.getModel()).changeFilter(row, field, filEdCb.getSelectedItem().toString(), filEdTf.getText(), "Integer");
				} else
				{
					((TM_Filt) jt.getModel()).changeFilter(row, field, filEdCb.getSelectedItem().toString(), filEdTf.getText(), "String");
				}
				f_allZakRefresh();
				window.dispose();
			}
		});
		opt.add(ch);
		JButton rem = new JButton("Удалить");
		rem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				((TM_Filt) jt.getModel()).removeFilter(row);
				f_allZakRefresh();
				window.dispose();
			}
		});
		opt.add(rem);
		JButton can = new JButton("Отмена");
		can.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				f_allZakRefresh();
				window.dispose();
			}
		});
		opt.add(can);
		pan.add(opt, BorderLayout.SOUTH);
		window.add(pan);
		window.pack();
		window.setVisible(true);
	}

	/** Test dates */

	private ArrayList<String> testData()
	{
		ArrayList<String> data = new ArrayList<String>();
		for (int i = 0; i < 3; i++)
		{
			data.add("142" + i);
		}
		return data;
	}

	private ArrayList<ArrayList<String>> createTableData(int type)
	{
		ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
		String[][] data = null;
		if (type == 0)
		{
			data = new String[][]
			{
				// {"Заказ","Равен","00000","String"},
				// {"Заказ","Начинается с","00000","String"},
				{
						"Заказ", "Длинна =", "5", "String"
				},
			};
			for (int i = 0; i < 1; i++)
			{
				res.add(new ArrayList<String>());
				for (int j = 0; j < 4; j++)
				{
					res.get(i).add(data[i][j]);
				}
			}
		}
		if (type == 1)
		{
			data = new String[][]
			{
					{
							"", ""
					},
					{
							"Заказ", ""
					},
					{
							"Заказчик", ""
					},
					{
							"Дата", ""
					},
					{
							"Цена", ""
					},
					{
							"Подразделение", ""
					},
			};
			for (int i = 0; i < 6; i++)
			{
				res.add(new ArrayList<String>());
				for (int j = 0; j < 2; j++)
				{
					res.get(i).add(data[i][j]);
				}
			}
		}
		return res;
	}

	private ArrayList<ArrayList<String>> CreateFishData()
	{
		ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
		String[][] data = null;
		data = new String[][]
		{
				{
						"Статья Затрат", "Факт Затраты", "Структура цены", "Разница"
				},
				{
						"Материалы", "35 000.00", "40 000.00", "<html><body><font color='green'>5 000.00</font></body></html>"
				},
				{
						"<html><body><font color='red'>Контрагенты</font></body></html>", "5 000.00", "<html><body><font color='red'>Отсутсвует</font></body></html>", "<html><body><font color='red'>-5 000.00</font></body></html>"
				},
				{
						"Персонал", "50 000.00", "60 000.00", "<html><body><font color='green'>10 000.00</font></body></html>"
				},
				{
						"Оборудование", "29 000.00", "20 000.00", "<html><body><font color='red'>-9 000.00</font></body></html>"
				},
				{
						"Дополнительные", "<html><body><font color='red'>Отсуствует</font></body></html>", "25 000.00", "<html><body><font color='green'>25 000.00</font></body></html>"
				},
				{
						"Непредвиденные", "1 000.00", "5 000.00", "<html><body><font color='green'>4 000.00</font></body></html>"
				},
				{
						"Итого", "120 000.00", "150 000.00", "<html><body><font color='green'>30 000.00</font></body></html>"
				}
		};
		for (int i = 0; i < 8; i++)
		{
			res.add(new ArrayList<String>());
			for (int j = 0; j < 4; j++)
			{
				res.get(i).add(data[i][j]);
			}
		}
		return res;
	}
}