Технология и средства разработки Java-приложений с использованием XML-описаний экранных форм
Разработка технологии и средств реализации Java-приложения, сокращающих трудоемкость создания и гибкость модификации интерфейса пользователя. Использование XML-документов для описания внешнего представления, элементов управления и событий экранных форм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.08.2011 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
<parameter name='request.delete.name' value='requestDelete'/>
</actioncontroller>
<internalframecontroller name='closingEvent' object='internalFrame'
type='closing' synchronize='false'
handler='com.nic.client.ui.swing.handlers.form.ClosingFormHandler'/>
<actioncontroller name='updateWindowMenuEvent'
handler='com.nic.client.ui.swing.handlers.UpdateWindowMenuHandler'/>
<actioncontroller name='updateToolBarEvent'
handler='com.nic.client.ui.swing.handlers.UpdateToolBarHandler'/>
<actioncontroller name='cancelEvent'
handler='com.nic.client.ui.swing.handlers.form.CloseFormHandler'/>
<actioncontroller name='closeEvent'
handler='com.nic.client.ui.swing.handlers.form.CloseFormHandler'/>
<actioncontroller name='saveEvent'
handler='com.nic.client.ui.swing.handlers.form.view.SaveFormViewHandler
'>
<depends name='storeEvent' type='before'/>
<depends name='cancelEvent' type='after'/>
<parameter name='data.model.list' value='mRecord'/>
</actioncontroller>
<actioncontroller name='storeEvent'
handler='com.nic.client.server.handlers.StoreDataRequestHandler'>
<parameter name='data.model.name' value='mRecord'/>
<parameter name='entity.name' value='recpts'/>
</actioncontroller>
<buttoncontroller name='unloadEvent' object='bUnload'
handler='com.nic.poeso.client.handlers.comings.UnloadPTSHandler'>
<parameter name='data.model.name' value='mRecord'/>
</buttoncontroller>
<buttoncontroller name='loadEvent' object='bLoad'
handler='com.nic.poeso.client.handlers.comings.LoadPTSHandler'>
<depends name='saveRowEvent' type='after'/>
<depends name='initListEvent' type='after'/>
</buttoncontroller>
<buttoncontroller name='loadEvent2' object='bLoadPrice'
handler='com.nic.poeso.client.handlers.comings.LoadPriceHandler'>
<depends name='saveRowEvent' type='after'/>
<depends name='initListEvent' type='after'/>
</buttoncontroller>
<actioncontroller name='saveRowEvent'
handler='com.nic.client.ui.swing.handlers.form.view.SaveFormViewHandler
'>
<parameter name='data.model.list' value='mRecord'/>
</actioncontroller>
<actioncontroller name='printEvent'
handler='com.nic.client.ui.swing.handlers.form.PrintFormHandler'>
<parameter name='document.name' value='Карточка прихода новых
ПТС'/>
<parameter name='start.point' value='A3'/>
</actioncontroller>
<actioncontroller name='addPopup' handler='com.nic.client.ui.swing.handlers.GeneratePopUpMenuHandler'>
<parameter name='object.names' value='root;scrollPane;tbList'/>
<parameter name='popupmenu.names'
value='popUnload;popLoad;popLoadPrice'/>
</actioncontroller>
<!-- Выбор организации -->
<mousecontroller name='selectOrgEvent' object='tfPost' clickcount='2'
type='clicked'>
<depends name='openTreeEvent' type='before'/>
<depends name='updateAttributesEvent' type='after'/>
</mousecontroller>
<actioncontroller name='updateAttributesEvent'
handler='com.nic.client.ui.swing.handlers.form.UpdateAttributesHandler'>
<parameter name='data.model.list' value='mRecord'/>
</actioncontroller>
<actioncontroller name='openTreeEvent'
handler='com.nic.client.ui.swing.handlers.form.OpenFormHandler'>
<parameter name='form.name' value='FormCompanyList'/>
<parameter name='init.saveConditionEvent' value='true'/>
<parameter name='is.unique' value='false'/>
</actioncontroller>
<actioncontroller name='filterEvent'
handler='com.nic.client.ui.swing.handlers.table.FilterFormHandler'>
<parameter name='table.name' value='tbList'/>
</actioncontroller>
</controller>
</settings>
ПРИЛОЖЕНИЕ Б.1
Внешний вид экранной формы
Рис.
ПРИЛОЖЕНИЕ В
Пример файла конфигурации редактора XML-описаний экранных форм
<?xml version='1.0' encoding='windows-1251'?>
<config>
<attributes name='Элементы управления'>
<item name='jbutton' extname='Кнопка'>
<property id='name' name='Наименование' type='text' uniq='true'/>
<property id='bounds' name='Границы' type='formulas'/>
<property id='font' name='Шрифт' type='font'/>
<property id='forecolor' name='Цвет шрифта' type='color'/>
<property id='backcolor' name='Цвет фона' type='color'/>
<property id='enable' name='Наличие' type='boolean'/>
<property id='text' name='Текст' type='text'/>
<property id='tooltip' name='Подсказка' type='text'/>
</item>
<!--все остальные элементы управления-->
</attributes>
<attributes_extending name='Производные элементы управления'>
<item name='jtree' extends='jtextarea' extname='Дерево' modeltype='xmldata'>
<property id='id' name='id' type='text' uniq='true'/>
<property id='bounds' name='Границы' type='formulas'/>
<property id='selection' name='Тип выделения' type='text'/></item>
</attributes_extending >
<modelsupported name='Модели элементов управления'>
<item id='xmldata' name='mRecord'>
<property id='xmldateboxmodel' prefix='dbm'/>
<property id='xmltextfieldmodel' prefix='tfm'/>
<property id='xmlcheckboxmodel' prefix='chbm'/>
</item>
<item id='xmldata' name='mCombo' separate='true'>
<property id='xmlcomboboxmodel' prefix='cbm'/>
</item>
</modelsupported>
<controllers name='Типы обработчиколв событий'>
<property id='mousecontroller'/>
<property id='internalframecontroller'/>
<property id='keycontroller'/>
<!--все остальные типы обработчиков событий-->
</controllers>
<parameteroperations name='Типы отношений'>
<property id='e' name='равно'/>
<property id='l' name='больше'/>
<property id='s' name='меньше'/>
<!--все остальные типы отношений-->
</parameteroperations>
</config>
ПРИЛОЖЕНИЕ Г
Фрагменты исходного текста программы ядра Java-приложения
//MainApplication.java
package com.nic.client.ui;
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import com.nic.client.util.*;
import com.nic.client.ui.swing.components.*;
public class MainApplication
{
static final int ALL_PROPERTIES = -1;
public static final int CLIENT_PROPERTY = 0;
public static final int ARGUMENT_PROPERTY = 1;
public static final int SESSION_PROPERTY = 2;
public static final int USER_PROPERTY = 3;
private static MainProperties props = new MainProperties();
private static String propsFile;
public MainApplication()
{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JWindow dialog = getStartupWindow(screenSize);
executeStartupPreparation();
initMainFrame(screenSize);
if(dialog != null)
dialog.dispose();
}
public static Object getProperty(String key, int type)
{
if(props.containsKey(key, type))
return props.getProperty(key, type);
return null;
}
public static Object getProperty(String key)
{
if(props.containsKey(key, SESSION_PROPERTY))
return props.getProperty(key, SESSION_PROPERTY);
return null;
}
public static void setProperty(String key, int type, Object value)
{
props.setProperty(key, type, value);
}
public static void setProperty(String key, Object value)
{
props.setProperty(key, SESSION_PROPERTY, value);
}
public static void saveProperties()
{
try
{
props.store(new FileOutputStream(propsFile), null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static MainProperties getProperties()
{
return props;
}
public static void main(String[] arg) throws Exception
{
if(arg.length == 0)
System.exit(-1);
propsFile = arg[0];
props.load(new FileInputStream(propsFile));
for(int i = 1; i < arg.length; i++)
setProperty(String.valueOf(i), ARGUMENT_PROPERTY, arg[i]);
Logger.createLog4jInstance(props.getProperties(MainApplication.CLIENT_PROPERTY, true));
Logger.log("Application started");
setLookAndFeel();
new LogStream(true);
new MainApplication();
}
private static void setLookAndFeel()
{
try
{
ResourceBundleImpl.initResourceBundle((String)getProperty("reference.properties.name", MainApplication.CLIENT_PROPERTY));
UIManager.LookAndFeelInfo[] lnf =
UIManager.getInstalledLookAndFeels();
String lnfClass =
(String)MainApplication.getProperty("look.and.feel.class",
CLIENT_PROPERTY);
if(!Strings.isEmpty(lnfClass))
{
for(int i = 0; i < lnf.length; i++)
{
if(lnf[i].getClassName().equals(lnfClass))
{
UIManager.setLookAndFeel(lnfClass);
break;
}
}
}
else
lnfClass = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(lnfClass);
String version = System.getProperty("java.version");
float ver = Strings.parseFloat(System.getProperty("java.specification.version"), -1);
String winlafStatus = (String)MainApplication.getProperty("winlaf.status", CLIENT_PROPERTY);
if (!"off".equalsIgnoreCase(winlafStatus))
if(lnfClass.indexOf("Windows") != -1 && (version.startsWith("1.4.2") || ver > 1.4))
{
net.java.plaf.LookAndFeelPatchManager.initialize();
UIManager.put("TextField.patchReadOnlyBackground", Boolean.FALSE);
UIManager.put("PasswordField.patchReadOnlyBackground", Boolean.FALSE);
UIManager.put("FormattedTextField.patchReadOnlyBackground", Boolean.FALSE);
UIManager.put("TextArea.patchReadOnlyBackground", Boolean.FALSE);
}
}
catch(Throwable th)
{
th.printStackTrace();
}
}
private JWindow getStartupWindow(Dimension screenSize)
{
JWindow dialog = null;
String image = (String)MainApplication.getProperty("startup.window.image.file", CLIENT_PROPERTY);
ImageIcon icon = null;
if(!Strings.isEmpty(image))
icon = new ImageIcon(image);
if(icon != null && (icon.getIconWidth() > 0 || icon.getIconHeight() > 0))
{
dialog = new JWindow();
dialog.getContentPane().add(new JImagePanel(icon));
Dimension dialogSize = new Dimension(icon.getIconWidth(), icon.getIconHeight());
dialog.setSize(dialogSize);
dialog.setLocation((int)(screenSize.width/2 - dialogSize.getWidth()/2), (int)(screenSize.height/2 - dialogSize.getHeight()/2));
final JWindow iconDialog = dialog;
new Thread()
{
public void run()
{
iconDialog.show();
}
}.start();
}
return dialog;
}
private void executeStartupPreparation()
{
String slink = (String)MainApplication.getProperty("startup.preparation.link", MainApplication.CLIENT_PROPERTY);
if(!Strings.isEmpty(slink))
{
String clss = Strings.byLastIndexOf(slink, "@");
String mthd = Strings.fromLastIndexOf(slink, "@");
new Execute(clss, mthd, new Object[0]).run();
}
}
private void initMainFrame(Dimension screenSize)
{
if(Strings.parseBoolean((String)MainApplication.getProperty("hide.mode", MainApplication.CLIENT_PROPERTY), false))
return;
MainFrame frame = MainFrame.newInstance();
frame.pack();
Dimension frameSize = frame.getSize();
frameSize.height = screenSize.height - (int)(3 * Toolkit.getDefaultToolkit().getScreenResolution() / 10);
frameSize.width = screenSize.width;
frame.setSize(frameSize);
if (Strings.parseBoolean((String)MainApplication.getProperty("main.frame.maximized", MainApplication.CLIENT_PROPERTY), false))
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
public static class MainProperties extends Properties
{
public MainProperties()
{
super();
}
public synchronized Object setProperty(String key, int type, Object value)
{
return put(type + "." + key, value);
}
public Object getProperty(String key, int type)
{
return get(type + "." + key);
}
public synchronized void setProperties(int type, Properties tempProperties)
{
for(Enumeration e = tempProperties.keys(); e.hasMoreElements(); )
{
String key = (String)e.nextElement();
String val = tempProperties.getProperty(key);
setProperty(key, type, val);
}
}
public Properties getProperties(int type, boolean convertKey)
{
Properties tempProperties = new Properties();
for(Enumeration e = keys(); e.hasMoreElements(); )
{
String key = (String)e.nextElement();
if(type != MainApplication.ALL_PROPERTIES && !key.startsWith(type + "."))
continue;
Object val = get(key);
if(!(val instanceof String))
continue;
if(convertKey)
key = key.substring((type + ".").length());
tempProperties.put(key, val);
}
return tempProperties;
}
public boolean containsKey(String key, int type)
{
return containsKey(type + "." + key);
}
public synchronized void store(OutputStream outStream, String header) throws IOException
{
store(outStream, header, MainApplication.CLIENT_PROPERTY);
}
public synchronized void store(OutputStream outStream, String header, int type) throws IOException
{
getProperties(type, true).store(outStream, header);
}
public synchronized void load(InputStream inStream, int type) throws IOException
{
Properties tempProperties = new Properties();
tempProperties.load(inStream);
setProperties(type, tempProperties);
}
public synchronized void load(InputStream inStream) throws IOException
{
load(inStream, MainApplication.CLIENT_PROPERTY);
}
}
}
//MainFrame.java
package com.nic.client.ui;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
import java.util.*;
import javax.swing.*;
import com.nic.client.ui.swing.*;
import com.nic.client.util.*;
public class MainFrame extends JFrame
{
private static MainFrame instance;
private static Form mainForm;
private List exitСheckers;
private ButtonGroup bgForms = new ButtonGroup();
public MainFrame()
{
exitСheckers = new ArrayList();
enableEvents(java.awt.AWTEvent.WINDOW_EVENT_MASK);
String image = (String)MainApplication.getProperty("logo.window.image.file", MainApplication.CLIENT_PROPERTY);
if(!Strings.isEmpty(image))
setIconImage(getToolkit().createImage(image));
setTitle((String)MainApplication.getProperty("application.title", MainApplication.CLIENT_PROPERTY));
}
private void init()
{
FormManager formManager = FormManager.getInstance();
mainForm = formManager.createForm(null, "FormMain", null, null);
mainForm.show(getContentPane());
}
public static MainFrame getInstance()
{
if(instance == null)
instance = new MainFrame();
return instance;
}
public static MainFrame newInstance()
{
getInstance();
instance.init();
return instance;
}
public static Form getFormInstance()
{
return mainForm;
}
public void processWindowEvent(java.awt.event.WindowEvent e)
{
if(e.getID() == java.awt.event.WindowEvent.WINDOW_CLOSING)
{
boolean can = true;
for(int i = 0; i < exitСheckers.size(); i++)
can = can && ((ExitChecker)exitСheckers.get(i)).canExit();
if(!can)
return;
super.processWindowEvent(e);
Logger.log("Application closed");
System.exit(0);
}
else
super.processWindowEvent(e);
}
public void addExitChecker(ExitChecker checker)
{
exitСheckers.add(checker);
}
public void removeExitChecker(ExitChecker checker)
{
exitСheckers.remove(checker);
}
public ButtonGroup getFormButtonGroup()
{
return bgForms;
}
public interface ExitChecker
{
public boolean canExit();
}
}
//FormManager.java
package com.nic.client.ui;
import java.awt.*;
import java.util.*;
import com.nic.client.util.*;
/**
* Предназначен для управления отображенными в окне приложения экранными формами
* <p>Copyright: Copyright (c) 2010
* <p>Company: ОАО НИЦ ЭТУ
* @author not attributable
* @version 1.0
*/
public class FormManager
{
/**Определяет идентификатор основного окна приложения */
public static final String MAIN_FORM = "0";
/**Определяет идентификатор родительской экранной формы */
public static final String PARENT_FORM = "PARENT";
/**Определяет идентификатор активной экранной формы */
public static final String ACTIVE_FORM = "ACTIVE";
/**Используемый по умолчанию загрузчик описаний экранных форм */
public FormSourceLoader defaultSourceLoader;
/**Список отображенных менеджером экранных форм */
ArrayList forms;
/**Объект менеджера экранных форм */
protected static FormManager instance;
/**
* Возвращает объект менеджера экранных форм
* @return объект менеджера экранных форм
*/
public static FormManager getInstance()
{
if(instance != null)
return instance;
instance = new FormManager();
instance.setFormSourceLoader(ApplicationFactory.getFactory().createFormSourceLoader());
return instance;
}
/**
* Создает франгмент экранной формы
* @param parent родительская экранная форма
* @param nameForm имя экранной формы
* @param nameFragment имя фрагмента экранной формы
* @param sourceLoader загрузчик описания экранной формы
* @return созданный фрагмент экранной формы
*/
public Fragment createFragment(Form parent, String nameForm, String nameFragment, FormSourceLoader sourceLoader)
{
if(sourceLoader == null)
sourceLoader = defaultSourceLoader;
Fragment fragment = ApplicationFactory.getFactory().createFragment(nameFragment);
fragment.build(parent, sourceLoader.getSource(nameForm), parent.getContext());
return fragment;
}
/**
* Создает экранную форму
* @param parent родительская экранная форма
* @param name имя экранной формы
* @param sourceLoader загрузчик описания экранной формы
* @param context контекст экранной формы
* @return созданная экранная форма
*/
public Form createForm(Form parent, String name, FormSourceLoader sourceLoader, AbstractContext context)
{
if(sourceLoader == null)
sourceLoader = defaultSourceLoader;
Form form = ApplicationFactory.getFactory().createForm(name);
form.build(parent, sourceLoader.getSource(name), context);
if(forms != null)
forms.add(form);
return form;
}
/**
* Модифицирует экранную форму
* @param экранная форма для модификации
* @param container контейнер для модификации
* @param sourceLoader загрузчик описания экранной формы
* @return модифицированная экранная форма
*/
public Form updateForm(Form form, Container container, FormSourceLoader sourceLoader)
{
if(sourceLoader == null)
sourceLoader = defaultSourceLoader;
form.rebuild(container, sourceLoader.getSource(form.getName()));
return form;
}
/**
* Возвращает объект экранной формы по идентификатору
* @param id идентификатор
* @return экранная форма с заданным идентификатором
*/
public Form getForm(String id)
{
if(id == null)
return null;
if(id.equals(PARENT_FORM))
return getParentForm();
if(id.equals(ACTIVE_FORM))
return getActiveForm();
for(int i = 0; i < forms.size(); i++)
{
Form form = (Form)forms.get(i);
if(id.equals(form.getID()))
return form;
}
return null;
}
/**
* Возвращает объект экранной формы по имени
* @param name имя экранной формы
* @return экранная форма с заданным именем
*/
public Form getFormByName(String name)
{
if(name == null)
return null;
for(int i = 0; i < forms.size(); i++)
{
Form form = (Form)forms.get(i);
if(name.equals(form.getName()))
return form;
}
return null;
}
/**
* Возвращает массив отображенных экранных форм с заданным именем
* @param name имя для отбора экранных форм
* @return массив отображенных экранных форм с заданным именем
*/
public Form[] getForms(String name)
{
Form[] array = new Form[forms.size()];
int j = 0;
for(int i = 0; i < forms.size(); i++)
{
Form form = (Form)forms.get(i);
if(name == null || name.equals(form.getName()))
{
array[j] = form;
j++;
}
}
Form[] temp = new Form[j];
System.arraycopy(array, 0, temp, 0, j);
return temp;
}
/**
* Удаляет экранную форму
* @param form удаляемая экранная форма
*/
public void removeForm(Form form)
{
forms.remove(form);
}
/**
* Активизирует экранную форму по заданному идентификатору
* @param id идентификатор активизируемой экранной формы
*/
public void setActiveForm(String id)
{
for(int i = 0; i < (forms.size() - 1); i++)
{
Form form = (Form)forms.get(i);
if(id.equals(form.getID()))
{
forms.remove(i);
forms.add(form);
return;
}
}
}
/**
* Возвращает активную экранную форму
* @return активная экранная форма
*/
public Form getActiveForm()
{
int size = forms.size();
return (size > 1) ? (Form)forms.get(size - 1): null;
}
/**
* Проверяет активность экранной формы <code>form</code>
* @param form проверяемая экранная форма
* @return true если экранная форма <code>form</code> активна
*/
public boolean isActiveForm(Form form)
{
int size = forms.size();
if(size > 0 && form != null)
{
Form activeForm = (Form)forms.get(0);
return form.getID().equals(activeForm.getID());
}
return false;
}
private Form getParentForm()
{
Form activeForm = getActiveForm();
if(activeForm == null)
return null;
String id = Strings.byLastIndexOf(activeForm.getID(), ".");
Form parent = FormManager.getInstance().getForm(id);
return parent;
}
/**
* Устанавливает используемый по умолчанию загрузчик экранных форм
* @param sourceLoader новый используемый по умолчанию загрузчик описаний экранных форм
*/
public void setFormSourceLoader(FormSourceLoader sourceLoader)
{
defaultSourceLoader = sourceLoader;
forms = new ArrayList();
}
}
//ComponentProducer.java
package com.nic.client.ui.producers;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
import java.awt.*;
import java.util.*;
import javax.swing.*;
import org.w3c.dom.*;
import com.nic.client.ui.*;
import com.nic.client.ui.basic.*;
import com.nic.client.ui.swing.*;
import com.nic.client.ui.swing.models.*;
import com.nic.client.ui.swing.models.XmlCheckBoxModel;
import com.nic.client.util.Strings;
public class ComponentProducer extends Producer
{
private String[] producedTypes = {"JLabel", "JButton", "JTextField", "JCheckBox", "JList", "JProgressBar", "JScrollBar", "JSlider", "JComboBox", "JMenuItem", "JCheckBoxMenuItem", "JSeparator", "JTable", "JTree", "JToolTip", "JPasswordField", "JEditorPane", "JTextArea", "JTextPane", "JFormattedTextField", "JSpinner", "JToggleButton", "JRadioButton"};
public boolean processed(String key)
{
return processedIndex(key) != -1;
}
private int processedIndex(String key)
{
for(int i = 0; i < producedTypes.length; i++)
{
if(producedTypes[i].equalsIgnoreCase(key))
return i;
}
return -1;
}
public Object createItem(Element item, Fragment fragment)
{
String name = item.getAttribute("name");
JComponent component = (JComponent)fragment.getObject(name);
if(component != null)
{
component.setVisible(true);
}
else
{
component = (JComponent)createObject("javax.swing." + producedTypes[processedIndex(item.getNodeName())], item, fragment, true);
processItem(component, item, fragment);
fragment.addObject(name, component);
}
return component;
}
public void hideItem(Object objectItem, Fragment fragment)
{
if(objectItem == null)
{
Object[] objectItems = processedItems(fragment);
for(int i = 0; i < objectItems.length; i++)
hideItem(objectItems[i], fragment);
return;
}
Object object = objectItem;
if(object instanceof JComponent)
{
JComponent component = (JComponent)object;
component.setVisible(false);
}
}
public void removeItem(Object objectItem, Fragment fragment)
{
if(objectItem == null)
{
Object[] objectItems = processedItems(fragment);
for(int i = 0; i < objectItems.length; i++)
removeItem(objectItems[i], fragment);
return;
}
Object object = objectItem;
if(object instanceof JComponent)
{
JComponent component = (JComponent)object;
component.setVisible(false);
Container container = component.getParent();
if(container != null)
container.remove(component);
fragment.removeObject(objectItem);
component = null;
objectItem = null;
}
}
public Object[] processedItems(Fragment fragment)
{
Map objects = ((BasicFragment)fragment).getObjects();
Object[] array = new Object[objects.size()];
Iterator iterator = objects.values().iterator();
int i = 0;
while(iterator.hasNext())
{
Object item = iterator.next();
String className = item.getClass().getName();
String packageName = item.getClass().getPackage().getName();
className = className.substring(packageName.length() + 1);
if(processed(className))
{
array[i] = item;
i++;
}
}
Object[] temp = new Object[i];
System.arraycopy(array, 0, temp, 0, i);
return temp;
}
protected void processItem(Object objectItem, Element item, Fragment fragment)
{
super.processItem(objectItem, item, fragment);
JComponent component = (JComponent)objectItem;
Object parent = fragment.getObject(((Element)item.getParentNode()).getAttribute("name"));
Object parentObject = (parent != null) ? parent: null;
if(parentObject != null && parentObject instanceof Container)
{
if(parentObject instanceof JScrollPane)
((JScrollPane)parentObject).setViewportView(component);
else
((Container)parentObject).add(component);
LayoutManager layout = ((Container)parentObject).getLayout();
if(layout instanceof ComponentLayout)
((ComponentLayout)layout).setBounds(component.getName(), item.getAttribute("bounds"));
else if(layout instanceof ComponentScrollPaneLayout)
((ComponentScrollPaneLayout)layout).setPreferredSize(component.getName(), item.getAttribute("preferredsize"));
}
if(component instanceof javax.swing.text.JTextComponent)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlTextFieldModel)model).setTextComponent((javax.swing.text.JTextComponent)component);
}
else if(component instanceof javax.swing.JSpinner)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((SpinnerModelItem)model).setSpinnerComponent((javax.swing.JSpinner)component);
}
else if(component instanceof com.nic.client.ui.swing.components.calendar.JDateBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlDateBoxModel)model).setDateBoxComponent((com.nic.client.ui.swing.components.calendar.JDateBox)component);
}
else if(component instanceof com.nic.client.ui.swing.components.calendar.JFullDateBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlFullDateBoxModel)model).setFullDateBoxComponent((com.nic.client.ui.swing.components.calendar.JFullDateBox)component);
}
else if(component instanceof com.nic.client.ui.swing.components.calendar.JApplyDateBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlDateBoxModel)model).setApplyDateBoxComponent((com.nic.client.ui.swing.components.calendar.JApplyDateBox)component);
}
else if(component instanceof com.nic.client.ui.swing.components.calendar.JApplyFullDateBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlFullDateBoxModel)model).setApplyFullDateBoxComponent((com.nic.client.ui.swing.components.calendar.JApplyFullDateBox)component);
}
else if(component instanceof javax.swing.JCheckBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlCheckBoxModel)model).setCheckBoxComponent((javax.swing.JCheckBox)component);
}
else if(component instanceof javax.swing.JComboBox)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlComboBoxModel)model).setComboBoxComponent((javax.swing.JComboBox)component);
}
else if(component instanceof javax.swing.JTable)
{
Object modelItem = fragment.getObject(item.getAttribute("model"));
Object model = (modelItem != null) ? modelItem: null;
if(model != null)
((XmlTableModel)model).setTableComponent((javax.swing.JTable)component);
}
else if(component instanceof javax.swing.JTree)
{
((JTree)component).getSelectionModel().setSelectionMode(Strings.parseInteger(item.getAttribute("selection.mode"), 0));
}
}
}
//ShowInfoHandler.java
package com.nic.client.ui.swing.handlers;
import com.nic.client.ui.*;
import com.nic.client.ui.swing.*;
import com.nic.client.ui.swing.controllers.*;
import com.nic.client.util.*;
import javax.swing.*;
import java.awt.*;
/*
Данный обработчик выдает информационное окно
@param type тип сообщения
@param header заголовок
@param message текст сообщения
@param options опции через;
@param need.return надо ли возвращать результат(иначе вернется null)
*/
/**
* <p>Заголовок: Класс выдачи информационного окна.</p>
* <p>Copyright: Copyright (c) 2010</p>
* <p>Компания: NIC</p>
* @author
* @version 1.0
*/
public class ShowInfoHandler implements HandlerItem
{
/**
* Выдает на экран информационное окно.
* @param event событие обработчика
* @param context@type тип сообщения. Возможные варианты ().
* @param context@header заголовок сообщения
* @param context@options заголовки кнопок перечисленные через <code>
*;</code>
* @param context@nead.return надо ли возвращать результат (в противном случае )
* @return <code>null</code>, если возникла исключительная ситуация или
* <code>"controller.changed"</code>, если все прошло успешно
*/
public Object handle(ControllerItem event)
{
Form form = (Form)event.getOwnerFragment();
ControllerContext context = event.getContext();
String type = (String)context.getParameter("type");
String message = (String)context.getParameter("message");
String options = (String)context.getParameter("options");
String header = "";
int typ = JOptionPane.ERROR_MESSAGE;
if("warning".equalsIgnoreCase(type))
{
typ = JOptionPane.WARNING_MESSAGE;
header = "Внимание!";
}
else if("error".equalsIgnoreCase(type))
{
typ = JOptionPane.ERROR_MESSAGE;
header = "Ошибка!";
}
else if("information".equalsIgnoreCase(type))
{
typ = JOptionPane.INFORMATION_MESSAGE;
header = "Информация";
}
else if("question".equalsIgnoreCase(type))
{
typ = JOptionPane.QUESTION_MESSAGE;
}
if(!Strings.isEmpty((String)context.getParameter("header")))
header = (String)context.getParameter("header");
Object[] opt = Strings.isEmpty(options) ? InformationDialog._CLOSE: Strings.parseStrings(options);
Component root = form.getRoot();
InformationDialog id = new InformationDialog(InformationDialog.getOwnerFrame(root), root, header, ResourceBundleImpl.getPropertyValue(null, "Message", new String[]{message}), null, null, typ, opt);
id.showDialog();
return "true".equals(context.getParameter("need.return", true)) ? id.getResult(): null;
}
}
//ServerManager.java
package com.nic.client.server;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author
* @version 1.0
*/
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
import org.w3c.dom.*;
import com.nic.client.ui.swing.*;
import com.nic.client.util.*;
import com.nic.client.ui.MainFrame;
import com.nic.client.ui.MainApplication;
public class ServerManager
{
public final static String EMPTY_RESPONSE = "<response/>";
public final static String ENCODING_1251 = "windows-1251";
public final static String ENCODING_KOI8 = "KOI8-R";
public final static int MIN_PORT = 3030;
public final static int MAX_PORT = 3080;
private static ServerManager instance;
private String host;
private String port;
private String encoding = ENCODING_1251;
private static RequestProcessor[] requestProcessor = {new DefaultRequestProcessor()};
private static ResultProcessor[] resultProcessor = {new DefaultResultProcessor()};
private String localIP = null;
public void setHost(String host)
{
this.host = host;
}
public void setPort(String port)
{
this.port = port;
}
public String getHost()
{
return host;
}
public String getPort()
{
return port;
}
public void setEncoding(String encoding)
{
this.encoding = encoding;
}
public String getEncodingString()
{
return "<?xml version='1.0' encoding='" + encoding + "'?>";
}
public static void setRequestProcessor(RequestProcessor[] processors)
{
requestProcessor = processors;
}
public static RequestProcessor[] getRequestProcessor()
{
return requestProcessor;
}
public static void addRequestProcessor(RequestProcessor processor)
{
RequestProcessor[] tmp = new RequestProcessor[requestProcessor.length + 1];
System.arraycopy(requestProcessor, 0, tmp, 0, requestProcessor.length);
tmp[requestProcessor.length] = processor;
requestProcessor = tmp;
}
public static void setResultProcessor(ResultProcessor[] processors)
{
resultProcessor = processors;
}
public static ResultProcessor[] getResultProcessor()
{
return resultProcessor;
}
public static void addResultProcessor(ResultProcessor processor)
{
ResultProcessor[] tmp = new ResultProcessor[resultProcessor.length + 1];
System.arraycopy(resultProcessor, 0, tmp, 0, resultProcessor.length);
tmp[resultProcessor.length] = processor;
resultProcessor = tmp;
}
public static ServerManager getInstance()
{
if (instance == null)
instance = new ServerManager();
return instance;
}
public static Element request(Element request)
{
return request(request, ResultProcessor.DEFAULT_PROCESS);
}
public static Element request(Element request, int type)
{
Element result = null;
try
{
for(int i = 0; i < requestProcessor.length; i++)
request = requestProcessor[i].process(request, type);
result = ServerManager.getInstance().requestImpl(request);
for(int i = 0; (i < resultProcessor.length && result != null); i++)
result = resultProcessor[i].process(request, result, type);
}
catch (Exception e)
{
e.printStackTrace();
if(type != ResultProcessor.NOT_WARNING_PROCESS)
{
InformationDialog message = new InformationDialog(MainFrame.getInstance(), "Ошибка", ResourceBundleImpl.getPropertyValue("request.error.message", "Request Error"), null, e.getMessage(), JOptionPane.ERROR_MESSAGE, InformationDialog._CANCEL_VIEW);
message.showDialog();
}
}
return result;
}
public Element requestImpl(Element request) throws Exception
{
Logger.log(Xmls.toString(request));
String response = post(Xmls.toString(request, null));
Logger.log(response);
return Xmls.parse("<?xml version='1.0' encoding='windows-1251'?>" +
response);
}
public String getFile(String name) throws Exception
{
String request = "<request name='file' type='java' object='supply'
operation='getFile'>" +
"<parameter name='filename' e='" + name + "'/>" +
"</request>";
String result = post(request);
result = result.substring(result.indexOf(">")+1);
result = result.substring(0, result.lastIndexOf("</"));
return result;
}
private String post(String request) throws Exception
{
byte[] bRequest;
byte[] buffer;
int len;
URL servlet;
StringBuffer headerbuf;
Socket socket;
BufferedOutputStream outBuffer;
bRequest = (getEncodingString() + request).getBytes(encoding);
servlet = new URL("http://" + host + ":" + port +
"/jboss/servlet/POESOServlet");
headerbuf = new StringBuffer();
headerbuf.append("POST ").append(servlet.getFile())
.append(" HTTP/1.0\r\n")
.append("Host: ").append(servlet.getHost()).append("\r\n")
.append("Content-Type: text/xml; charset=").append(encoding).append("\r\n")
.append("Content-Length: ").append(bRequest.length).append("\r\n\r\n");
socket = new Socket(servlet.getHost(), servlet.getPort());
outBuffer = new BufferedOutputStream(socket.getOutputStream());
outBuffer.write(headerbuf.toString().getBytes(encoding));
outBuffer.write(bRequest);
outBuffer.flush();
socket.getOutputStream().flush();
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
ByteArrayOutputStream resultBuf = new ByteArrayOutputStream();
buffer = new byte[1024];
while((len = socket.getInputStream().read(buffer)) > 0)
resultBuf.write(buffer, 0, len);
os.close();
is.close();
resultBuf.close();
String temp = resultBuf.toString();
int pos = temp.indexOf("\r\n\r\n");
return temp.substring(pos+4);
}
public static boolean checkPort()
{
String newPort = findOpenPort(instance.host, MIN_PORT, MAX_PORT, instance.port);
if(newPort == null)
return false;
instance.port = newPort;
return true;
}
public static boolean checkPort(int port)
{
String newPort = findOpenPort(instance.host, port, port, instance.port);
if(newPort == null)
return false;
instance.port = newPort;
return true;
}
private static String findOpenPort(String host, int begin, int end, String defaultValue)
{
Socket socket = null;
int port;
try
{
port = Integer.parseInt(defaultValue);
socket = new Socket(host, port);
socket.close();
return String.valueOf(port);
}
catch(Exception e)
{
}
for(port = begin; port <= end; port++)
{
try
{
socket = new Socket(host, port);
socket.close();
return String.valueOf(port);
}
catch(Exception e)
{
continue;
}
}
return null;
}
public String getLocalIP()
{
String host = this.host;
String port = this.port;
if(localIP != null)
return localIP;
try
{
if(host == null)
host = (String)MainApplication.getProperty("server.host", MainApplication.CLIENT_PROPERTY);
if(port == null)
port = (String)MainApplication.getProperty("server.port", MainApplication.CLIENT_PROPERTY);
if(host == null || port == null)
throw new IllegalStateException("ServerManager: host or port not initialized");
URL servlet = new URL("http://" + host + ":" + port + "/jboss/servlet/POESOServlet");
Socket socket = new Socket(servlet.getHost(), servlet.getPort());
localIP = socket.getLocalAddress().getHostAddress();
System.out.println("Local IP is " + localIP);
socket.close();
return localIP;
}
catch(Exception ex)
{
ex.printStackTrace();
return null;
}
}
}
Размещено на Allbest.ru
Подобные документы
Разработка и использование классов при создании приложений. Использование odbc-технологии для создания внешних представлений. Определение источника данных. Создание удаленного и независимого внешнего представления данных. Управление объектами Excel.
лабораторная работа [413,9 K], добавлен 14.05.2011Java Runtime Environment - минимальная реализация виртуальной машины, необходимая для исполнения приложений, без компилятора и других средств разработки. Компиляция исходного кода через командную строку. Основные моменты создания игрового 2d-приложения.
курсовая работа [2,1 M], добавлен 26.04.2014Диаграмма консольного приложения табулирования функции. Отличие консольного приложения и приложения и GUI. Диаграмма классов для JFrameи JPanel. Создание простейшего фрейма в Java. Компоновка элементов интерфейса внутри фрейма. Цикл обработки событий.
лекция [693,8 K], добавлен 01.05.2014Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.
курсовая работа [197,5 K], добавлен 19.11.2009Особенности архитектуры Java. Технология Java Database Connectivity. Кроссплатформенность Java-приложений. Преимущества языка программирования. Логическая структура базы данных. Структура программного комплекса. Верификация программных средств.
курсовая работа [962,8 K], добавлен 13.01.2016Трансляция как процесс перевода программного кода из текстовой формы в машинные коды. Основные категории программ Java. Основные управляющие операторы. Объявление и инициализация переменных. Основные средства разработки приложений, написанных на Java.
презентация [938,2 K], добавлен 26.10.2013Преимущество использования программ, написанных на Java, требования к ним и настройки на клиентском ПК. Развертывание и последующее "автоматическое" обновление версий GUI клиента с помощью использования технологии Java Web Start в среде Windows.
реферат [33,2 K], добавлен 16.05.2011Разработка программы-модели в среде "Adamview" для имитации стратегии и наглядной иллюстрации работы программы. Настройка сети; описание эмулятора стратегии и экранных форм интерфейса оператора. Структурная схема распределённой системы управления.
курсовая работа [2,6 M], добавлен 21.01.2013Кратка историческая справка развития языка Java. Анализ предметной области. Java platform, enterprise and standart edition. Апплеты, сервлеты, gui-приложения. Розработка программного кода, консольное приложение. Результаты работы апплета, сервлета.
курсовая работа [549,2 K], добавлен 23.12.2015Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.
курсовая работа [508,1 K], добавлен 10.11.2014