/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, 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 org.apache.aries.jmx.blueprint.codec;
import java.util.Map;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.OpenDataException;
import org.apache.aries.jmx.blueprint.BlueprintMetadataMBean;
import org.osgi.service.blueprint.reflect.MapEntry;
import org.osgi.service.blueprint.reflect.RegistrationListener;
import org.osgi.service.blueprint.reflect.ServiceMetadata;
public class BPServiceMetadata extends BPComponentMetadata {
private int autoExport;
private String[] interfaces;
private int ranking;
private BPRegistrationListener[] listeners;
private BPMapEntry[] properties;
private BPTarget serviceComponent;
public BPServiceMetadata(CompositeData service) {
super(service);
autoExport = (Integer) service.get(BlueprintMetadataMBean.AUTO_EXPORT);
interfaces = (String[]) service.get(BlueprintMetadataMBean.INTERFACES);
ranking = (Integer) service.get(BlueprintMetadataMBean.RANKING);
CompositeData[] cd_listeners = (CompositeData[]) service.get(BlueprintMetadataMBean.REGISTRATION_LISTENERS);
listeners = new BPRegistrationListener[cd_listeners.length];
for (int i = 0; i < listeners.length; i++) {
listeners[i] = new BPRegistrationListener(cd_listeners[i]);
}
CompositeData[] cd_props = (CompositeData[]) service.get(BlueprintMetadataMBean.SERVICE_PROPERTIES);
properties = new BPMapEntry[cd_props.length];
for (int i = 0; i < properties.length; i++) {
properties[i] = new BPMapEntry(cd_props[i]);
}
Byte[] buf = (Byte[]) service.get(BlueprintMetadataMBean.SERVICE_COMPONENT);
serviceComponent = (BPTarget) Util.boxedBinary2BPMetadata(buf);
}
public BPServiceMetadata(ServiceMetadata service) {
super(service);
autoExport = service.getAutoExport();
interfaces = (String[])service.getInterfaces().toArray(new String[0]);
ranking = service.getRanking();
listeners = new BPRegistrationListener[service.getRegistrationListeners().size()];
int i = 0;
for (Object listener : service.getRegistrationListeners()) {
listeners[i++] = new BPRegistrationListener((RegistrationListener) listener);
}
properties = new BPMapEntry[service.getServiceProperties().size()];
i = 0;
for (Object prop : service.getServiceProperties()) {
properties[i++] = new BPMapEntry((MapEntry) prop);
}
serviceComponent = (BPTarget) Util.metadata2BPMetadata(service.getServiceComponent());
}
protected Map<String, Object> getItemsMap() {
Map<String, Object> items = super.getItemsMap();
items.put(BlueprintMetadataMBean.AUTO_EXPORT, autoExport);
items.put(BlueprintMetadataMBean.INTERFACES, interfaces);
items.put(BlueprintMetadataMBean.RANKING, ranking);
CompositeData[] cd_listeners = new CompositeData[listeners.length];
for (int i = 0; i < listeners.length; i++) {
cd_listeners[i] = listeners[i].asCompositeData();
}
items.put(BlueprintMetadataMBean.REGISTRATION_LISTENERS, cd_listeners);
CompositeData[] cd_props = new CompositeData[properties.length];
for (int i = 0; i < properties.length; i++) {
cd_props[i] = properties[i].asCompositeData();
}
items.put(BlueprintMetadataMBean.SERVICE_PROPERTIES, cd_props);
items.put(BlueprintMetadataMBean.SERVICE_COMPONENT, Util.bpMetadata2BoxedBinary(serviceComponent));
return items;
}
public CompositeData asCompositeData() {
try {
return new CompositeDataSupport(BlueprintMetadataMBean.SERVICE_METADATA_TYPE, getItemsMap());
} catch (OpenDataException e) {
throw new RuntimeException(e);
}
}
public int getAutoExport() {
return autoExport;
}
public String[] getInterfaces() {
return interfaces;
}
public int getRanking() {
return ranking;
}
public BPRegistrationListener[] getRegistrationListeners() {
return listeners;
}
public BPTarget getServiceComponent() {
return serviceComponent;
}
public BPMapEntry[] getServiceProperties() {
return properties;
}
}