/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* Licensed 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 com.hazelcast.osgi;
import com.hazelcast.osgi.impl.Activator;
import com.hazelcast.util.ExceptionUtil;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.Version;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Map;
public class TestBundle implements Bundle {
static final long TEST_BUNDLE_ID = 1L;
private final TestBundleContext testBundleContext;
private final Activator activator;
private volatile int state;
public TestBundle() {
this(null);
}
public TestBundle(RegisterDeregisterListener registerDeregisterListener) {
this.testBundleContext = new TestBundleContext(this, registerDeregisterListener);
this.activator = new Activator();
setState(RESOLVED);
}
@Override
public TestBundleContext getBundleContext() {
return testBundleContext;
}
@Override
public int getState() {
return state;
}
void setState(int state) {
this.state = state;
}
@Override
public long getBundleId() {
return TEST_BUNDLE_ID;
}
@Override
public URL getResource(String name) {
return getClass().getResource(name);
}
@Override
public Enumeration getResources(String name) throws IOException {
return getClass().getClassLoader().getResources(name);
}
@Override
public Enumeration findEntries(String path, String filePattern, boolean recursive) {
return null;
}
@Override
public Class loadClass(String name) throws ClassNotFoundException {
return Class.forName(name);
}
@Override
public String getSymbolicName() {
return "com.hazelcast";
}
@Override
public ServiceReference[] getRegisteredServices() {
return testBundleContext.getAllServiceReferences();
}
@Override
public synchronized void start() throws BundleException {
int currentState = state;
if (state == RESOLVED) {
try {
setState(STARTING);
activator.start(testBundleContext);
setState(ACTIVE);
} catch (Throwable t) {
setState(currentState);
ExceptionUtil.rethrow(t);
}
}
}
@Override
public synchronized void stop() throws BundleException {
int currentState = state;
if (state == ACTIVE) {
try {
setState(STOPPING);
activator.stop(testBundleContext);
setState(RESOLVED);
} catch (Throwable t) {
setState(currentState);
ExceptionUtil.rethrow(t);
}
}
}
@Override
public ServiceReference[] getServicesInUse() {
throw new UnsupportedOperationException();
}
@Override
public void start(int options) throws BundleException {
throw new UnsupportedOperationException();
}
@Override
public void stop(int options) throws BundleException {
throw new UnsupportedOperationException();
}
@Override
public void update(InputStream input) throws BundleException {
throw new UnsupportedOperationException();
}
@Override
public void update() throws BundleException {
throw new UnsupportedOperationException();
}
@Override
public void uninstall() throws BundleException {
throw new UnsupportedOperationException();
}
@Override
public Dictionary getHeaders() {
throw new UnsupportedOperationException();
}
@Override
public String getLocation() {
throw new UnsupportedOperationException();
}
@Override
public boolean hasPermission(Object permission) {
throw new UnsupportedOperationException();
}
@Override
public Dictionary getHeaders(String locale) {
throw new UnsupportedOperationException();
}
@Override
public Enumeration getEntryPaths(String path) {
throw new UnsupportedOperationException();
}
@Override
public URL getEntry(String path) {
return getClass().getResource(path);
}
@Override
public long getLastModified() {
throw new UnsupportedOperationException();
}
@Override
public Map getSignerCertificates(int signersType) {
throw new UnsupportedOperationException();
}
@Override
public Version getVersion() {
throw new UnsupportedOperationException();
}
interface RegisterDeregisterListener {
void onRegister(String clazz, TestServiceReference serviceReference);
void onDeregister(String clazz, TestServiceReference serviceReference);
}
}