⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcmprop.java

📁 OSGI这是一个中间件,与UPNP齐名,是用于移植到嵌入式平台之上
💻 JAVA
字号:
/* * Copyright (c) 2003, KNOPFLERFISH project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above *   copyright notice, this list of conditions and the following *   disclaimer in the documentation and/or other materials *   provided with the distribution. * * - Neither the name of the KNOPFLERFISH project nor the names of its *   contributors may be used to endorse or promote products derived *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */package org.knopflerfish.bundle.desktop.cm;import org.osgi.framework.*;import org.osgi.service.cm.*;import org.osgi.util.tracker.*;import java.util.*;import org.knopflerfish.service.desktop.*;import org.knopflerfish.util.metatype.*;import org.osgi.service.metatype.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class JCMProp extends JPanel {  AttributeDefinition ad;  JComponent comp = null;  JLabel     err;  public JCMProp(AttributeDefinition ad, Dictionary props) {    super(new BorderLayout());    this.ad = ad;        comp = null;    err  = new JLabel();    err.setForeground(Color.red);    int card     = ad.getCardinality();    int maxItems = Integer.MAX_VALUE;    if(card == Integer.MAX_VALUE ||       card == Integer.MIN_VALUE) {      maxItems = Integer.MAX_VALUE;    } else if(card < 0) {      maxItems = -card;    } else {      maxItems = card;    }        if(card < 0) {      comp = new JVector(ad, 			 (Vector)props.get(ad.getID()), 			 "Vector items",			 maxItems);    } else if(card > 0) {      comp = new JVector(ad, 			 Util.toVector((Object[])props.get(ad.getID())), 			 "Array items",			 maxItems);    } else {      if(ad.getOptionValues() != null) {	if(ad.getOptionLabels() != null) {	  comp = new JComboBox(ad.getOptionLabels());	} else {	  comp = new JComboBox(ad.getOptionValues());	}      } else {	switch(ad.getType()) {	case AttributeDefinition.STRING:	  comp = new JTextField();	  break;	case AttributeDefinition.BOOLEAN:	  comp = new JCheckBox();	  break;	case AttributeDefinition.INTEGER:	case AttributeDefinition.SHORT:	case AttributeDefinition.LONG:	case AttributeDefinition.DOUBLE:	case AttributeDefinition.FLOAT:	  comp = new JNumber(ad);	  break;	default:	  comp = new JTextField();	}      }    }        add(comp, BorderLayout.CENTER);    add(err,  BorderLayout.SOUTH);        Object obj = props.get(ad.getID());    //    System.out.println(ad.getID() + "=" + obj + " " + (obj != null ? obj.getClass().getName() : "null"));    if(ad.getCardinality() == 0) {      setValue(AD.toString(obj != null ? obj : ad.getDefaultValue()));    } else {      // done in constructor for JVector    }   }      void setErr(String s) {    err.setText(s);    invalidate();    revalidate();    repaint();  }  public void setValue(Object obj) {    if(comp instanceof JVector) {      JVector jv = (JVector)comp;      jv.setValue(obj);    } else if(comp instanceof JNumber) {      ((JNumber)comp).setValue(AD.parse(obj.toString(), 0, ad.getType()));    } else {      String s = AD.toString(obj);      if(comp instanceof JTextField) {	JTextField text = (JTextField)comp;	text.setText(s);      } else if(comp instanceof JCheckBox) {	JCheckBox cb = (JCheckBox)comp;	cb.setSelected("true".equals(s));      } else if(comp instanceof JComboBox) {	JComboBox cb = (JComboBox)comp;	String[] opts = ad.getOptionValues();	for(int i = 0; i < opts.length; i++) {	  if(opts[i].equals(obj)) {	    cb.setSelectedIndex(i);	    return;	  }	}	throw new IllegalArgumentException("Unknown option value " + obj);      }    }  }  public Object getValue() {     String s = null;    if(comp instanceof JVector) {      JVector jv = (JVector)comp;      if(ad.getCardinality() < 0) {	s  = AD.toString(jv.getVector());      } else {	s  = AD.toString(jv.getArray());      }    } else if(comp instanceof JNumber) {      JNumber number = (JNumber)comp;      s = number.getValue().toString();    } else if(comp instanceof JTextField) {      JTextField text = (JTextField)comp;      s = text.getText();    } else if(comp instanceof JCheckBox) {      JCheckBox cb = (JCheckBox)comp;      s = "" + cb.isSelected();    } else if(comp instanceof JComboBox) {      JComboBox cb = (JComboBox)comp;      s = ad.getOptionValues()[cb.getSelectedIndex()];    }    //    System.out.println("getValue " + ad + ", s=" + s);        String msg = ad.validate(s);        //    System.out.println("validate msg=" + msg);        if(msg != null && !"".equals(msg)) {      throw new IllegalArgumentException(s + ": " + msg);    }      return AD.parse(s, ad.getCardinality(), ad.getType());  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -