package io.eguan.webui.jmx;
/*
* #%L
* Project eguan
* %%
* Copyright (C) 2012 - 2017 Oodrive
* %%
* 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.
* #L%
*/
import io.eguan.vold.model.DeviceMXBean;
import io.eguan.vold.model.VvrObjectNameFactory;
import io.eguan.webui.model.DeviceModel;
import io.eguan.webui.model.VvrModel;
import java.util.UUID;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
/**
* The class represents a device in the JMX model.
*
* @author oodrive
* @author ebredzinski
*
*/
final class JmxDeviceModel implements DeviceModel {
private final DeviceMXBean deviceMXBean;
private final VvrModel vvr;
JmxDeviceModel(final MBeanServerConnection jmxConnection, final UUID ownerUuid, final VvrModel vvr,
final UUID deviceUuid) {
final ObjectName deviceObjectName = VvrObjectNameFactory.newDeviceObjectName(ownerUuid, vvr.getItemUuid(),
deviceUuid);
this.vvr = vvr;
this.deviceMXBean = JMX.newMXBeanProxy(jmxConnection, deviceObjectName, DeviceMXBean.class, false);
}
@Override
public final UUID getItemUuid() {
return UUID.fromString(deviceMXBean.getUuid());
}
@Override
public final String getDeviceName() {
return deviceMXBean.getName();
}
@Override
public final void setDeviceName(final String name) {
deviceMXBean.setName(name);
}
@Override
public final String getDeviceDescription() {
return deviceMXBean.getDescription();
}
@Override
public final void setDeviceDescription(final String description) {
deviceMXBean.setDescription(description);
}
@Override
public final String getDeviceIqn() {
return deviceMXBean.getIqn();
}
@Override
public final void setDeviceIqn(final String iqn) throws IllegalStateException {
deviceMXBean.setIqn(iqn);
}
@Override
public final String getDeviceIscsiAlias() {
return deviceMXBean.getIscsiAlias();
}
@Override
public final void setDeviceIscsiAlias(final String alias) throws IllegalStateException {
deviceMXBean.setIscsiAlias(alias);
}
@Override
public final int getDeviceIscsiBlockSize() {
return deviceMXBean.getIscsiBlockSize();
}
@Override
public final void setDeviceIscsiBlockSize(final int blockSize) throws IllegalStateException {
deviceMXBean.setIscsiBlockSize(blockSize);
}
@Override
public final long getDeviceSize() {
return deviceMXBean.getSize();
}
@Override
public final void setDeviceSize(final long size) {
deviceMXBean.setSize(size);
}
@Override
public final UUID getDeviceParent() {
return UUID.fromString(deviceMXBean.getParent());
}
@Override
public final boolean isDeviceActive() {
return deviceMXBean.isActive();
}
@Override
public final boolean isDeviceReadOnly() {
return deviceMXBean.isReadOnly();
}
@Override
public final void activateDeviceRO() {
final String taskUuid = deviceMXBean.activateRO();
// Wait RO activation
if (vvr instanceof JmxVvrModel) {
((JmxVvrModel) vvr).waitTaskEnd(taskUuid);
}
}
@Override
public final void activateDeviceRW() {
final String taskUuid = deviceMXBean.activateRW();
// Wait RW activation
if (vvr instanceof JmxVvrModel) {
((JmxVvrModel) vvr).waitTaskEnd(taskUuid);
}
}
@Override
public final void deActivateDevice() {
final String taskUuid = deviceMXBean.deActivate();
// Wait RW activation
if (vvr instanceof JmxVvrModel) {
((JmxVvrModel) vvr).waitTaskEnd(taskUuid);
}
}
@Override
public final void takeDeviceSnapshot(final String name) throws IllegalStateException {
if (name.isEmpty() || name == null) {
deviceMXBean.takeSnapshot();
}
else
deviceMXBean.takeSnapshot(name);
}
@Override
public final void deleteDevice() {
deviceMXBean.delete();
}
}