blob: 03485a439c4d9ff362736c2b6fbc28d01a0c29f4 [file] [log] [blame]
/*
* 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.karaf.scr.state;
import org.apache.karaf.bundle.core.BundleState;
import org.apache.karaf.bundle.core.BundleStateService;
import org.osgi.framework.Bundle;
import org.osgi.service.component.runtime.ServiceComponentRuntime;
import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
import org.osgi.service.component.runtime.dto.UnsatisfiedReferenceDTO;
public class ScrBundleStateService implements BundleStateService {
ServiceComponentRuntime scr;
public ScrBundleStateService(ServiceComponentRuntime scr) {
this.scr = scr;
}
@Override
public String getName() {
return BundleStateService.NAME_DS;
}
@Override
public String getDiag(Bundle bundle) {
StringBuilder sb = new StringBuilder();
for (ComponentDescriptionDTO desc : scr.getComponentDescriptionDTOs(bundle)) {
for (ComponentConfigurationDTO cfg : scr.getComponentConfigurationDTOs(desc)) {
if (cfg.state != ComponentConfigurationDTO.ACTIVE
&& cfg.state != ComponentConfigurationDTO.SATISFIED) {
sb.append(cfg.description.name).append(" (").append(cfg.id).append(")\n");
if ((cfg.state & ComponentConfigurationDTO.UNSATISFIED_CONFIGURATION) != 0) {
sb.append(" missing configurations: ");
boolean first = true;
for (String s : cfg.description.configurationPid) {
if (!first) {
sb.append(", ");
}
sb.append(s);
first = false;
}
sb.append("\n");
}
if ((cfg.state & ComponentConfigurationDTO.UNSATISFIED_REFERENCE) != 0) {
sb.append(" missing references: ");
boolean first = true;
for (UnsatisfiedReferenceDTO ur : cfg.unsatisfiedReferences) {
if (!first) {
sb.append(", ");
}
sb.append(ur.name);
first = false;
}
sb.append("\n");
}
}
}
}
return sb.toString();
}
@Override
public BundleState getState(Bundle bundle) {
if (bundle.getState() == Bundle.ACTIVE) {
for (ComponentDescriptionDTO desc : scr.getComponentDescriptionDTOs(bundle)) {
for (ComponentConfigurationDTO cfg : scr.getComponentConfigurationDTOs(desc)) {
if (cfg.state != ComponentConfigurationDTO.ACTIVE
&& cfg.state != ComponentConfigurationDTO.SATISFIED) {
return BundleState.Waiting;
}
}
}
}
return BundleState.Unknown;
}
}