[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r480 - /projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/
scm-notify at zb4osgi.aaloa.org
scm-notify at zb4osgi.aaloa.org
Mon Sep 24 17:52:11 CEST 2012
Author: manlio.bacco
Date: Mon Sep 24 17:52:10 2012
New Revision: 480
Log:
new devices management
minor fixes
Modified:
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ClusterFactoryBase.java
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/GenericHADeviceFactory.java
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADevice.java
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADeviceBase.java
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HAProfile.java
projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ReportingConfiguration.java
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ClusterFactoryBase.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ClusterFactoryBase.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ClusterFactoryBase.java Mon Sep 24 17:52:10 2012
@@ -113,4 +113,4 @@
}
return null;
}
-}
+}
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/GenericHADeviceFactory.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/GenericHADeviceFactory.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/GenericHADeviceFactory.java Mon Sep 24 17:52:10 2012
@@ -18,7 +18,7 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-*/
+ */
package it.cnr.isti.zigbee.ha.driver.core;
@@ -42,81 +42,79 @@
*/
public class GenericHADeviceFactory extends HADeviceFactoryBase {
- static final Logger logger = LoggerFactory.getLogger(GenericHADeviceFactory.class);
+ static final Logger logger = LoggerFactory.getLogger(GenericHADeviceFactory.class);
- final protected String deviceId;
- final protected Class<?> inter, impl;
-
- protected String[] classes;
-
-
- /**
- * Build an {@link HADeviceFactory} that refine {@link ZigBeeDevice} by means of <code>cImplementation</code>,<br>
- * into a <code>cInterface</code> service. This factory build the instance of the new service by invoking<br>
- * the constructor <code>cImplementation(BundleContext, ZigBeeDevice)</code>.<br>
- * By default the {@link #getRefinedInterfaces()} is built to return the values:<br>
- * <pre>
- * cInterface.getName()
- * HADevice.class.getName()
- * </pre>
- *
- *
- * @param ctx {@link BundleContext} to use for registering the {@link HADeviceFactory} service
- * @param cInterface {@link Class} representing the refined service that this factory will install
- * @param cImplementation {@link Class} representing the implementation of the refinement service that will be created by the factory
- *
- * @throws ZigBeeHAException
- */
- public GenericHADeviceFactory(BundleContext ctx, Class<?> cInterface, Class<?> cImplementation) throws ZigBeeHAException {
-
- super(ctx, cInterface);
-
+ final protected String deviceId;
+ final protected Class<?> inter, impl;
+
+ protected String[] classes;
+
+ /**
+ * Build an {@link HADeviceFactory} that refine {@link ZigBeeDevice} by means of <code>cImplementation</code>,<br>
+ * into a <code>cInterface</code> service. This factory build the instance of the new service by invoking<br>
+ * the constructor <code>cImplementation(BundleContext, ZigBeeDevice)</code>.<br>
+ * By default the {@link #getRefinedInterfaces()} is built to return the values:<br>
+ * <pre>
+ * cInterface.getName()
+ * HADevice.class.getName()
+ * </pre>
+ *
+ *
+ * @param ctx {@link BundleContext} to use for registering the {@link HADeviceFactory} service
+ * @param cInterface {@link Class} representing the refined service that this factory will install
+ * @param cImplementation {@link Class} representing the implementation of the refinement service that will be created by the factory
+ *
+ * @throws ZigBeeHAException
+ */
+ public GenericHADeviceFactory(BundleContext ctx, Class<?> cInterface, Class<?> cImplementation) throws ZigBeeHAException {
+
+ super(ctx, cInterface);
+
this.inter = cInterface;
this.impl = cImplementation;
classes = new String[]{ cInterface.getName(), HADevice.class.getName() };
-
+
try {
- deviceId = cInterface.getField("DEVICE_ID").get(null).toString();
+ deviceId = cInterface.getField("DEVICE_ID").get(null).toString();
} catch (Exception e) {
- logger.error(
- "Unable to retrive the implemented the DeviceId refined by this driver"
- + " by means of the reflection, the class {} does not provide the static "
- + "field DEVICE_ID.\n"
- + "Please modify the source code of the class by adding such static field or"
- + "implement a proper {} class",
- cInterface.getName(), HADeviceFactory.class.getName()
- );
- logger.debug("Stack exception of the GenericHADeviceFactory() error", e);
-
- throw new ZigBeeHAException("Unable to retrieve DEVICE_ID by means of reflection", e);
+ logger.error(
+ "Unable to retrive the implemented the DeviceId refined by this driver"
+ + " by means of the reflection, the class {} does not provide the static "
+ + "field DEVICE_ID.\n"
+ + "Please modify the source code of the class by adding such static field or"
+ + "implement a proper {} class",
+ cInterface.getName(), HADeviceFactory.class.getName()
+ );
+ logger.debug("Stack exception of the GenericHADeviceFactory() error", e);
+
+ throw new ZigBeeHAException("Unable to retrieve DEVICE_ID by means of reflection", e);
}
- }
+ }
- @Override
- public String getDeviceId() {
+ @Override
+ public String getDeviceId() {
return deviceId;
- }
+ }
- public GenericHADeviceFactory setRefinedInterfaces(String[] classNames) {
+ public GenericHADeviceFactory setRefinedInterfaces(String[] classNames) {
classes = classNames;
return this;
- }
-
- @Override
- public String[] getRefinedInterfaces() {
+ }
+
+ @Override
+ public String[] getRefinedInterfaces() {
return classes;
- }
+ }
- @Override
- public HADeviceBase getInstance(ZigBeeDevice zbd) throws ZigBeeHAException {
+ @Override
+ public HADeviceBase getInstance(ZigBeeDevice zbd) throws ZigBeeHAException {
try {
- Constructor builder = impl.getConstructor(BundleContext.class, ZigBeeDevice.class);
- HADeviceBase device = (HADeviceBase) builder.newInstance(ctx, zbd);
- return device;
+ Constructor builder = impl.getConstructor(BundleContext.class, ZigBeeDevice.class);
+ HADeviceBase device = (HADeviceBase) builder.newInstance(ctx, zbd);
+ return device;
} catch (Exception e) {
- logger.error("Unable to create an instance of the refined device due to:", e);
- return null;
+ logger.error("Unable to create an instance of the refined device due to:", e);
+ return null;
}
- }
-
-}
+ }
+}
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADevice.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADevice.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADevice.java Mon Sep 24 17:52:10 2012
@@ -49,10 +49,9 @@
public static final String HA_DEVICE_GROUP = "zigbee.ha.group";
public static final String HA_DEVICE_STANDARD = "zigbee.ha.standard";
- public static final int[] MANDATORY = {HAProfile.BASIC,HAProfile.IDENTIFY};
+ public static final int[] MANDATORY = {HAProfile.BASIC, HAProfile.IDENTIFY};
public static final int[] OPTIONAL = {HAProfile.POWER_CONFIGURATION, HAProfile.DEVICE_TEMPERATURE_CONFIGURATION, HAProfile.ALARMS};
- public static final int[] STANDARD = ArraysUtil.append(MANDATORY, OPTIONAL);
-
+ public static final int[] STANDARD = ArraysUtil.append(MANDATORY, OPTIONAL);
public String getName();
/**
@@ -62,8 +61,7 @@
*/
public int getDeviceType();
public int getEndPointId();
- public int getProfileId();
-
+ public int getProfileId();
/**
* Access method for the <b>Mandatory</b> cluster: {@link Basic}
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADeviceBase.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADeviceBase.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HADeviceBase.java Mon Sep 24 17:52:10 2012
@@ -31,7 +31,6 @@
import it.cnr.isti.zigbee.ha.cluster.glue.general.Identify;
import it.cnr.isti.zigbee.ha.cluster.glue.general.PowerConfiguration;
import it.cnr.isti.zigbee.ha.driver.HADriverConfiguration;
-import it.cnr.isti.zigbee.ha.driver.HADriverConfiguration.ForceDeviceCompliance;
import it.cnr.isti.zigbee.ha.driver.HADriverConfiguration.ProvidedClusterMode;
import it.cnr.isti.zigbee.ha.driver.core.reflection.DeviceDescription;
import it.cnr.isti.zigbee.zcl.library.api.core.Subscription;
@@ -92,16 +91,19 @@
final int size;
if( Activator.getConfiguration().getClusterDiscoveryMode().equals(ProvidedClusterMode.HomeAutomationProfileStrict.toString()) ){
size = zbDevice.getInputClusters().length;
- }else{
+ }
+ else{
size = zbDevice.getInputClusters().length + zbDevice.getOutputClusters().length;
}
//clusters = new Cluster[size];
clusters = new ArrayList<Cluster>();
clusters.ensureCapacity(size);
+ // mandatory
basic = (Basic) addCluster(HAProfile.BASIC);
identify = (Identify) addCluster(HAProfile.IDENTIFY);
+ // optional
powerConfiguration = (PowerConfiguration) addCluster(HAProfile.POWER_CONFIGURATION);
deviceTemperature = (DeviceTemperatureConfiguration) addCluster(HAProfile.DEVICE_TEMPERATURE_CONFIGURATION);
alarms = (Alarms) addCluster(HAProfile.ALARMS);
@@ -111,7 +113,7 @@
return zbDevice.getDeviceId();
}
- public abstract String getName();
+ public abstract String getName();
public int getEndPointId(){
return zbDevice.getId();
@@ -124,12 +126,12 @@
for(int i = 0; i < clusters.size(); i++){
if(clusters.get(i).getId() == clusterId){
- logger.warn("Cluster already added - skipped.");
+ logger.warn("Cluster already added to this device - skipped.");
return null;
}
}
- /* TODO review */
+ /* TODO review
if(!Activator.getConfiguration().getClusterDiscoveryMode().equals(ProvidedClusterMode.HomeAutomationProfileStrict.toString()) &&
Activator.getConfiguration().getDeviceCompliance().equals(ForceDeviceCompliance.AcceptNotCompliantDevices.toString())){
@@ -162,9 +164,9 @@
"devices please use cluster discovery mode {}", new Object[]{ProvidedClusterMode.HomeAutomationProfileStrict,
ForceDeviceCompliance.AcceptNotCompliantDevices, ProvidedClusterMode.EitherInputAndOutput});
}
- /* */
-
- else if ( ! zbDevice.providesInputCluster(clusterId) ){
+
+
+ else */ if ( ! zbDevice.providesInputCluster(clusterId) ){
if (getDescription().isMandatory(clusterId)){
logger.warn(
"ZigBeeDevice with DeviceId={} of Home Automation profile " +
@@ -255,7 +257,6 @@
return basic;
}
-
public Identify getIdentify(){
return identify;
}
@@ -271,7 +272,6 @@
public Alarms getAlarms(){
return alarms;
}
-
public abstract DeviceDescription getDescription();
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HAProfile.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HAProfile.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/HAProfile.java Mon Sep 24 17:52:10 2012
@@ -82,7 +82,6 @@
public static final int TIME = Time.ID;
//public static final int RSSI_LOCATION // 0X000b
public static final int COMMISSIONING = Commissioning.ID; // TODO
-
// Closures
//public static final int SHADE_CONFIGURATION // 0x0100
@@ -112,16 +111,139 @@
public static final int IAS_WD = IASWD.ID; // TODO
// devices
+ // GENERIC 0x0000 - 0x00FF
+ public static final int ONOFF_SWITCH = OnOffSwitch.DEVICE_ID;
+ public static final int LEVELCONTROL = LevelControlSwitch.DEVICE_ID;
+ public static final int ONOFF_OUTPUT = OnOffOutput.DEVICE_ID;
+ public static final int MAINS_POWER_OUTLET = MainsPowerOutlet.DEVICE_ID;
+ // LIGHTNING 0x0100 - 0x1FF
+ public static final int ONOFF_LIGHT = OnOffLight.DEVICE_ID;
public static final int DIMMABLE_LIGHT = DimmableLight.DEVICE_ID;
+ public static final int ONOFF_LIGHT_SWITCH = OnOffLightSwitch.DEVICE_ID;
+ public static final int LIGHT_SENSOR = LightSensor.DEVICE_ID;
+ public static final int OCCUPANCY_SENSOR = OccupancySensor.DEVICE_ID;
+ // HVAC - 0x0300 - 0x3FF
+ public static final int TEMPERATURE_SENSOR = TemperatureSensor.DEVICE_ID;
+ // Intruder Alarm Systems 0x0400 - 0xFFFF
+ public static final int IAS_CONTROL_INDICATING_EQUIPMENT = IASControlAndIndicatingEquipment.DEVICE_ID;
public static final int IASZONE = IAS_Zone.DEVICE_ID;
- public static final int LEVELCONTROL = LevelControlSwitch.DEVICE_ID;
- public static final int LIGHT_SENSOR = LightSensor.DEVICE_ID;
- public static final int MAINS_POWER_OUTLET = MainsPowerOutlet.DEVICE_ID;
- public static final int OCCUPANCY_SENSOR = OccupancySensor.DEVICE_ID;
- public static final int ONOFF_LIGHT = OnOffLight.DEVICE_ID;
- public static final int ONOFF_LIGHT_SWITCH = OnOffLightSwitch.DEVICE_ID;
- public static final int ONOFF_OUTPUT = OnOffOutput.DEVICE_ID;
- public static final int ONOFF_SWITCH = OnOffSwitch.DEVICE_ID;
- public static final int TEMPERATURE_SENSOR = TemperatureSensor.DEVICE_ID;
- public static final int IAS_CONTROL_INDICATING_EQUIPMENT = IASControlAndIndicatingEquipment.DEVICE_ID;
+
+ public String getDeviceName(String deviceID){
+
+ try{
+ String id = Integer.toHexString((Integer.parseInt(deviceID)));
+
+ if(id.equals(Integer.toHexString(HAProfile.ONOFF_SWITCH)))
+ return OnOffSwitch.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.LEVELCONTROL)))
+ return LevelControlSwitch.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.ONOFF_OUTPUT)))
+ return OnOffOutput.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.MAINS_POWER_OUTLET)))
+ return MainsPowerOutlet.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.ONOFF_LIGHT)))
+ return OnOffLight.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.DIMMABLE_LIGHT)))
+ return DimmableLight.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.ONOFF_LIGHT_SWITCH)))
+ return OnOffLightSwitch.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.LIGHT_SENSOR)))
+ return LightSensor.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.OCCUPANCY_SENSOR)))
+ return OccupancySensor.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.TEMPERATURE_SENSOR)))
+ return TemperatureSensor.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.IAS_CONTROL_INDICATING_EQUIPMENT)))
+ return IASControlAndIndicatingEquipment.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.IASZONE)))
+ return IAS_Zone.NAME;
+
+ else return null;
+ }
+ catch(Exception ex){
+ return null;
+ }
+ }
+
+ public String getClusterName(String clusterID){
+
+ try{
+ String id = Integer.toHexString((Integer.parseInt(clusterID)));
+
+ if(id.equals(Integer.toHexString(HAProfile.BASIC)))
+ return Basic.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.POWER_CONFIGURATION)))
+ return PowerConfiguration.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.DEVICE_TEMPERATURE_CONFIGURATION)))
+ return DeviceTemperatureConfiguration.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.IDENTIFY)))
+ return Identify.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.GROUPS)))
+ return Groups.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.SCENES)))
+ return Scenes.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.ON_OFF)))
+ return OnOff.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.ON_OFF_SWITCH_CONFIGURATION)))
+ return OnOffSwitchConfiguration.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.LEVEL_CONTROL)))
+ return LevelControl.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.ALARMS)))
+ return Alarms.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.TIME)))
+ return Time.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.COMMISSIONING)))
+ return Commissioning.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.COLOR_CONTROL)))
+ return ColorControl.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.ILLUMINANCE_MEASUREMENT)))
+ return IlluminanceMeasurement.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.TEMPERATURE_MEASUREMENT)))
+ return TemperatureMeasurement.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.RELATIVE_HUMIDITY_MEASUREMENT)))
+ return RelativeHumidityMeasurement.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.OCCUPANCY_SENSING)))
+ return OccupacySensing.NAME;
+
+ else if(id.equals(Integer.toHexString(HAProfile.IAS_ZONE)))
+ return IASZone.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.IAS_ACE)))
+ return IASACE.NAME;
+ else if(id.equals(Integer.toHexString(HAProfile.IAS_WD)))
+ return IASWD.NAME;
+
+ else return null;
+ }
+ catch(Exception ex){
+ return null;
+ }
+ }
+
+ public String getCategoryDeviceName(String deviceID){
+
+ try{
+ String id = Integer.toHexString((Integer.parseInt(deviceID)));
+ if(id.startsWith("0"))
+ return "Generic";
+ else if(id.startsWith("1"))
+ return "Lighting";
+ else if(id.startsWith("2"))
+ return "Closures";
+ else if(id.startsWith("3"))
+ return "HVAC";
+ else if(id.startsWith("4"))
+ return "IAS";
+ else
+ return null;
+ }
+ catch(Exception ex){
+ return null;
+ }
+ }
}
Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ReportingConfiguration.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ReportingConfiguration.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.zb4osgi.zigbee.ha.driver/src/main/java/it/cnr/isti/zigbee/ha/driver/core/ReportingConfiguration.java Mon Sep 24 17:52:10 2012
@@ -93,12 +93,12 @@
public static final String DEFAULT_CLUSTER_DISCOVERY_MODE = "HomeAutomationProfileStrict";
- public static final String FORCE_DEVICE_COMPLIANCE_KEY = "it.isti.cnr.zigbee.ha.driver.device.compliance";
+ //public static final String FORCE_DEVICE_COMPLIANCE_KEY = "it.isti.cnr.zigbee.ha.driver.device.compliance";
- public static final String DEFAULT_FORCE_DEVICE_COMPLIANCE = "OnlyCompliantDevices";
+ //public static final String DEFAULT_FORCE_DEVICE_COMPLIANCE = "OnlyCompliantDevices";
public abstract String getClusterDiscoveryMode();
- public abstract String getDeviceCompliance();
+ //public abstract String getDeviceCompliance();
/* */
public abstract int getReportingMinimum();
More information about the Commit
mailing list