You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2014/11/27 15:32:37 UTC
[22/24] jclouds-labs git commit: JCLOUDS-785: Leave only Abiquo
skeleton to start coding Abiquo 3 provider
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java
deleted file mode 100644
index 55ab1ad..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.task.AsyncTask;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.model.transport.SingleResourceTransportDto;
-import com.abiquo.server.core.task.TaskDto;
-import com.abiquo.server.core.task.TasksDto;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import com.google.common.primitives.Longs;
-
-/**
- * This class is used to decorate transport objects that are owners of some
- * {@link TaskDto}
- */
-public abstract class DomainWithTasksWrapper<T extends SingleResourceTransportDto> extends DomainWrapper<T> {
-
- protected DomainWithTasksWrapper(final ApiContext<AbiquoApi> context, final T target) {
- super(context, target);
- }
-
- public Iterable<AsyncTask<?, ?>> listTasks() {
- TasksDto result = context.getApi().getTaskApi().listTasks(target);
- List<AsyncTask<?, ?>> tasks = Lists.newArrayList();
- for (TaskDto dto : result.getCollection()) {
- tasks.add(newTask(context, dto));
- }
-
- // Return the most recent task first
- Collections.sort(tasks, new Ordering<AsyncTask<?, ?>>() {
- @Override
- public int compare(final AsyncTask<?, ?> left, final AsyncTask<?, ?> right) {
- return Longs.compare(left.getTimestamp(), right.getTimestamp());
- }
- }.reverse());
-
- return tasks;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java
deleted file mode 100644
index 908edcc..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.transform;
-import static org.jclouds.reflect.Reflection2.constructor;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.util.Collection;
-import java.util.List;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.exception.WrapperException;
-import org.jclouds.abiquo.domain.task.AsyncTask;
-import org.jclouds.abiquo.domain.task.ConversionTask;
-import org.jclouds.abiquo.domain.task.VirtualMachineTask;
-import org.jclouds.abiquo.domain.task.VirtualMachineTemplateTask;
-import org.jclouds.abiquo.domain.util.LinkUtils;
-import org.jclouds.abiquo.reference.ValidationErrors;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.model.rest.RESTLink;
-import com.abiquo.model.transport.AcceptedRequestDto;
-import com.abiquo.model.transport.SingleResourceTransportDto;
-import com.abiquo.model.transport.WrapperDto;
-import com.abiquo.server.core.task.TaskDto;
-import com.abiquo.server.core.task.enums.TaskType;
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.Invokable;
-import com.google.inject.TypeLiteral;
-
-/**
- * This class is used to decorate transport objects with high level
- * functionality.
- */
-public abstract class DomainWrapper<T extends SingleResourceTransportDto> {
- /** The rest context. */
- protected ApiContext<AbiquoApi> context;
-
- /** The wrapped object. */
- protected T target;
-
- protected DomainWrapper(final ApiContext<AbiquoApi> context, final T target) {
- super();
- this.context = checkNotNull(context, "context");
- this.target = checkNotNull(target, "target");
- }
-
- /**
- * Returns the URI that identifies the transport object
- *
- * @return The URI identifying the transport object
- */
- public URI getURI() {
- RESTLink link = LinkUtils.getSelfLink(target);
- return link == null ? null : URI.create(link.getHref());
- }
-
- /**
- * Returns the wrapped object.
- */
- public T unwrap() {
- return target;
- }
-
- /**
- * Refresh the state of the current object.
- */
- @SuppressWarnings("unchecked")
- public void refresh() {
- RESTLink link = checkNotNull(LinkUtils.getSelfLink(target), ValidationErrors.MISSING_REQUIRED_LINK + " edit/self");
-
- HttpResponse response = context.getApi().get(link);
-
- ParseXMLWithJAXB<T> parser = new ParseXMLWithJAXB<T>(context.utils().xml(), TypeLiteral.get((Class<T>) target
- .getClass()));
-
- target = parser.apply(response);
- }
-
- /**
- * Read the ID of the parent resource from the given link.
- *
- * @param parentLinkRel
- * The link to the parent resource.
- * @return The ID of the parent resource.
- */
- protected Integer getParentId(final String parentLinkRel) {
- return target.getIdFromLink(parentLinkRel);
- }
-
- /**
- * Wraps an object in the given wrapper class.
- */
- public static <T extends SingleResourceTransportDto, W extends DomainWrapper<T>> W wrap(
- final ApiContext<AbiquoApi> context, final Class<W> wrapperClass, @Nullable final T target) {
- if (target == null) {
- return null;
- }
-
- try {
- Invokable<W, W> cons = constructor(wrapperClass, ApiContext.class, target.getClass());
- return cons.invoke(null, context, target);
- } catch (InvocationTargetException e) {
- throw new WrapperException(wrapperClass, target, e.getTargetException());
- } catch (IllegalAccessException e) {
- throw new WrapperException(wrapperClass, target, e);
- }
- }
-
- /**
- * Wrap a collection of objects to the given wrapper class.
- */
- public static <T extends SingleResourceTransportDto, W extends DomainWrapper<T>> Iterable<W> wrap(
- final ApiContext<AbiquoApi> context, final Class<W> wrapperClass, @Nullable final Iterable<T> targets) {
- if (targets == null) {
- return null;
- }
-
- return transform(targets, new Function<T, W>() {
- @Override
- public W apply(final T input) {
- return wrap(context, wrapperClass, input);
- }
- });
- }
-
- /**
- * Unwrap a collection of objects.
- */
- public static <T extends SingleResourceTransportDto, W extends DomainWrapper<T>> Iterable<T> unwrap(
- final Iterable<W> targets) {
- return transform(targets, new Function<W, T>() {
- @Override
- public T apply(final W input) {
- return input.unwrap();
- }
- });
- }
-
- /**
- * Update or creates a link of "target" with the uri of a link from "source".
- */
- protected <T1 extends SingleResourceTransportDto, T2 extends SingleResourceTransportDto> void updateLink(
- final T1 target, final String targetLinkRel, final T2 source, final String sourceLinkRel) {
- RESTLink parent = null;
-
- checkNotNull(source.searchLink(sourceLinkRel), ValidationErrors.MISSING_REQUIRED_LINK);
-
- // Insert
- if ((parent = target.searchLink(targetLinkRel)) == null) {
- target.addLink(new RESTLink(targetLinkRel, source.searchLink(sourceLinkRel).getHref()));
- }
- // Replace
- else {
- parent.setHref(source.searchLink(sourceLinkRel).getHref());
- }
- }
-
- /**
- * Join a collection of {@link WrapperDto} objects in a single collection
- * with all the elements of each wrapper object.
- */
- public static <T extends SingleResourceTransportDto> Iterable<T> join(
- final Iterable<? extends WrapperDto<T>> collection) {
- return concat(transform(collection, new Function<WrapperDto<T>, Collection<T>>() {
- @Override
- public Collection<T> apply(WrapperDto<T> input) {
- return input.getCollection();
- }
- }));
- }
-
- /**
- * Utility method to get an {@link AsyncTask} given an
- * {@link AcceptedRequestDto}.
- *
- * @param acceptedRequest
- * The accepted request dto.
- * @return The async task.
- */
- protected AsyncTask<?, ?> getTask(final AcceptedRequestDto<String> acceptedRequest) {
- RESTLink taskLink = acceptedRequest.getStatusLink();
- checkNotNull(taskLink, ValidationErrors.MISSING_REQUIRED_LINK + AsyncTask.class);
-
- // This will return null on untrackable tasks
- TaskDto dto = context.getApi().getTaskApi().getTask(taskLink);
- return newTask(context, dto);
- }
-
- /**
- * Utility method to get all {@link AsyncTask} related to an
- * {@link AcceptedRequestDto}.
- *
- * @param acceptedRequest
- * The accepted request dto.
- * @return The async task array.
- */
- protected AsyncTask<?, ?>[] getTasks(final AcceptedRequestDto<String> acceptedRequest) {
- List<AsyncTask<?, ?>> tasks = Lists.newArrayList();
-
- for (RESTLink link : acceptedRequest.getLinks()) {
- // This will return null on untrackable tasks
- TaskDto dto = context.getApi().getTaskApi().getTask(link);
- if (dto != null) {
- tasks.add(newTask(context, dto));
- }
- }
-
- AsyncTask<?, ?>[] taskArr = new AsyncTask<?, ?>[tasks.size()];
- return tasks.toArray(taskArr);
- }
-
- /**
- * Creates a new {@link AsyncTask} for the given {@link TaskDto} and the
- * given result class.
- *
- * @param context
- * The API context.
- * @param dto
- * The dto used to generate the domain object.
- * @return The task domain object.
- */
- protected static AsyncTask<?, ?> newTask(final ApiContext<AbiquoApi> context, final TaskDto dto) {
- // Can be null in untrackable tasks
- if (dto == null) {
- return null;
- }
-
- Class<? extends AsyncTask<?, ?>> taskClass = null;
-
- switch (dto.getType().getOwnerType()) {
- case CONVERSION:
- taskClass = ConversionTask.class;
- break;
- case VIRTUAL_MACHINE_TEMPLATE:
- taskClass = VirtualMachineTemplateTask.class;
- break;
- case VIRTUAL_MACHINE:
- // A VirtualMachine task can generate a template (if task is an
- // instance)
- taskClass = dto.getType() == TaskType.INSTANCE || dto.getType() == TaskType.INSTANCE_PERSISTENT ? VirtualMachineTemplateTask.class
- : VirtualMachineTask.class;
- break;
- }
-
- try {
- Invokable<? extends AsyncTask<?, ?>, ? extends AsyncTask<?, ?>> cons = constructor(taskClass,
- ApiContext.class, dto.getClass());
- return cons.invoke(null, context, dto);
- } catch (InvocationTargetException e) {
- throw new WrapperException(taskClass, dto, e.getTargetException());
- } catch (IllegalAccessException e) {
- throw new WrapperException(taskClass, dto, e);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java
deleted file mode 100644
index ddf3933..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.collect.PagedIterables.advance;
-import static org.jclouds.collect.PagedIterables.onlyPage;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-
-import com.abiquo.model.rest.RESTLink;
-import com.abiquo.model.transport.WrapperDto;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-
-/**
- * This class represents a collection that is paginated.
- * <p>
- * Contains a single page of the collection, and all the information needed to
- * fetch the next page on demand.
- *
- *
- * @see PagedIterable
- */
-public class PaginatedCollection<T, W extends WrapperDto<T>> extends IterableWithMarker<T> {
- protected final AbiquoApi api;
- protected final W delegate;
- protected final ParseXMLWithJAXB<W> parser;
-
- public PaginatedCollection(AbiquoApi api, W delegate, ParseXMLWithJAXB<W> parser) {
- this.api = checkNotNull(api, "api must not be null");
- this.delegate = checkNotNull(delegate, "delegate must not be null");
- this.parser = checkNotNull(parser, "parser must not be null");
- }
-
- @Override
- public Iterator<T> iterator() {
- return delegate.getCollection().iterator();
- }
-
- @Override
- public Optional<Object> nextMarker() {
- return Optional.<Object> fromNullable(delegate.searchLink("next"));
- }
-
- /**
- * Transforms this {@link PaginatedCollection} into a {@link PagedIterable}
- * so next the pages can be easily fetched.
- *
- * @return A PagedIterable that is capable of fetching more pages.
- */
- public PagedIterable<T> toPagedIterable() {
- return new ToPagedIterable<T, W>(api, parser).apply(this);
- }
-
- /**
- * Returns a function that transforms the PaginatedCollection into a
- * {@link PagedIterable}.
- * <p>
- * The PagedIterable will fetch the next pages based on the <code>next</code>
- * link of the current object.
- * <p>
- * Subclasses may overwrite this one, to provide a concrete type for the
- * parser parameter, so this function can be injected in the different api
- * methods and be used as a transformer for the returned collection.
- *
- */
- public static class ToPagedIterable<T, W extends WrapperDto<T>> implements
- Function<PaginatedCollection<T, W>, PagedIterable<T>> {
- protected final AbiquoApi api;
- protected final ParseXMLWithJAXB<W> parser;
-
- public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB<W> parser) {
- this.api = checkNotNull(api, "api must not be null");
- this.parser = checkNotNull(parser, "parser must not be null");
- }
-
- @Override
- public PagedIterable<T> apply(final PaginatedCollection<T, W> input) {
- return input.nextMarker().isPresent() ? advance(input, nextPage(input)) : onlyPage(input);
- }
-
- protected Function<Object, IterableWithMarker<T>> nextPage(final PaginatedCollection<T, W> input) {
- return new Function<Object, IterableWithMarker<T>>() {
- @Override
- public IterableWithMarker<T> apply(Object marker) {
- checkArgument(marker instanceof RESTLink, "Marker must be a RESTLink");
- RESTLink next = RESTLink.class.cast(marker);
-
- // The Abiquo API does not provide the media types in the
- // pagination links, but it will be the same type than the
- // current page, so just set it.
- next.setType(input.delegate.getMediaType());
-
- W nextPage = parser.apply(api.get(next));
- return new PaginatedCollection<T, W>(api, nextPage, parser);
- }
- };
- }
-
- }
-
- // Delegate methods
-
- public Integer getTotalSize() {
- return delegate.getTotalSize();
- }
-
- public List<RESTLink> getLinks() {
- return delegate.getLinks();
- }
-
- public RESTLink searchLink(String rel) {
- return delegate.searchLink(rel);
- }
-
- public List<RESTLink> searchLinks(String rel) {
- return delegate.searchLinks(rel);
- }
-
- public RESTLink searchLink(String rel, String title) {
- return delegate.searchLink(rel, title);
- }
-
- public RESTLink searchLinkByHref(String href) {
- return delegate.searchLinkByHref(href);
- }
-
- public Integer getIdFromLink(String rel) {
- return delegate.getIdFromLink(rel);
- }
-
- public String getMediaType() {
- return delegate.getMediaType();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/builder/LimitsBuilder.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/builder/LimitsBuilder.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/builder/LimitsBuilder.java
deleted file mode 100644
index 7b11d3c..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/builder/LimitsBuilder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain.builder;
-
-/**
- * Base class for all builders that represent limits.
- *
- * @param <T>
- * The type of the target builder.
- */
-public abstract class LimitsBuilder<T extends LimitsBuilder<T>> {
- /** The default limits for enterprises (unlimited). */
- protected static final int DEFAULT_LIMITS = 0;
-
- protected Integer ramSoftLimitInMb = DEFAULT_LIMITS;
-
- protected Integer ramHardLimitInMb = DEFAULT_LIMITS;
-
- protected Integer cpuCountSoftLimit = DEFAULT_LIMITS;
-
- protected Integer cpuCountHardLimit = DEFAULT_LIMITS;
-
- protected Long hdSoftLimitInMb = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long hdHardLimitInMb = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long storageSoft = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long storageHard = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long vlansSoft = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long vlansHard = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long publicIpsSoft = Long.valueOf(DEFAULT_LIMITS);
-
- protected Long publicIpsHard = Long.valueOf(DEFAULT_LIMITS);
-
- @SuppressWarnings("unchecked")
- public T ramLimits(final int soft, final int hard) {
- this.ramSoftLimitInMb = soft;
- this.ramHardLimitInMb = hard;
- return (T) this;
- }
-
- @SuppressWarnings("unchecked")
- public T cpuCountLimits(final int soft, final int hard) {
- this.cpuCountSoftLimit = soft;
- this.cpuCountHardLimit = hard;
- return (T) this;
- }
-
- @SuppressWarnings("unchecked")
- public T hdLimitsInMb(final long soft, final long hard) {
- this.hdSoftLimitInMb = soft;
- this.hdHardLimitInMb = hard;
- return (T) this;
- }
-
- @SuppressWarnings("unchecked")
- public T storageLimits(final long soft, final long hard) {
- this.storageSoft = soft;
- this.storageHard = hard;
- return (T) this;
- }
-
- @SuppressWarnings("unchecked")
- public T vlansLimits(final long soft, final long hard) {
- this.vlansSoft = soft;
- this.vlansHard = hard;
- return (T) this;
- }
-
- @SuppressWarnings("unchecked")
- public T publicIpsLimits(final long soft, final long hard) {
- this.publicIpsSoft = soft;
- this.publicIpsHard = hard;
- return (T) this;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/Conversion.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/Conversion.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/Conversion.java
deleted file mode 100644
index 73abdd4..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/Conversion.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain.cloud;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Date;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.DomainWithTasksWrapper;
-import org.jclouds.abiquo.domain.task.ConversionTask;
-import org.jclouds.abiquo.reference.ValidationErrors;
-import org.jclouds.abiquo.reference.rest.ParentLinkName;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.model.enumerator.ConversionState;
-import com.abiquo.model.enumerator.DiskFormatType;
-import com.abiquo.model.rest.RESTLink;
-import com.abiquo.server.core.appslibrary.ConversionDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
-import com.google.inject.TypeLiteral;
-
-/**
- * Adds high level functionality to {@link ConversionDto}.
- *
- * @see API: <a
- * href="http://community.abiquo.com/display/ABI20/Conversion+Resource">
- * http://community.abiquo.com/display/ABI20/Conversion+Resource</a>
- */
-public class Conversion extends DomainWithTasksWrapper<ConversionDto> {
- /**
- * Constructor to be used only by the builder.
- */
- protected Conversion(final ApiContext<AbiquoApi> context, final ConversionDto target) {
- super(context, target);
- }
-
- // Parent access
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Machine+Template+Resource"
- * > http://community.abiquo.com/display/ABI20/Virtual+Machine+Template+
- * Resource</a>
- */
- public VirtualMachineTemplate getVirtualMachineTemplate() {
- RESTLink link = checkNotNull(target.searchLink(ParentLinkName.VIRTUAL_MACHINE_TEMPLATE),
- ValidationErrors.MISSING_REQUIRED_LINK + " " + ParentLinkName.VIRTUAL_MACHINE_TEMPLATE);
-
- HttpResponse response = context.getApi().get(link);
-
- ParseXMLWithJAXB<VirtualMachineTemplateDto> parser = new ParseXMLWithJAXB<VirtualMachineTemplateDto>(
- context.utils().xml(), TypeLiteral.get(VirtualMachineTemplateDto.class));
-
- return wrap(context, VirtualMachineTemplate.class, parser.apply(response));
- }
-
- /**
- * Starts a new BPM task to regenerate a failed conversion.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Conversion+Resource#ConversionResource-UpdateConversion"
- * > http://community.abiquo.com/display/ABI20/Conversion+Resource#
- * ConversionResource- UpdateConversion</a>
- * @return The task reference to track its progress
- */
- public ConversionTask restartFailedConversion() {
- return getVirtualMachineTemplate().requestConversion(getTargetFormat());
- }
-
- // Delegate methods
-
- public String getSourcePath() {
- return target.getSourcePath();
- }
-
- public ConversionState getState() {
- return target.getState();
- }
-
- public String getTargetPath() {
- return target.getTargetPath();
- }
-
- public Long getTargetSizeInBytes() {
- return target.getTargetSizeInBytes();
- }
-
- public DiskFormatType getSourceFormat() {
- return target.getSourceFormat();
- }
-
- public DiskFormatType getTargetFormat() {
- return target.getTargetFormat();
- }
-
- public Date getStartTimestamp() {
- return target.getStartTimestamp();
- }
-
- @Override
- public String toString() {
- return "Conversion [sourcePath=" + getSourcePath() + ", sourceFormat=" + getSourceFormat() + ", targetPath="
- + getTargetPath() + ", targetFormat=" + getTargetFormat() + ", targetSizeInBytes=" + getTargetSizeInBytes()
- + ", startTimestamp=" + getStartTimestamp() + ", state=" + getState() + "]";
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/HardDisk.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/HardDisk.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/HardDisk.java
deleted file mode 100644
index b08b850..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/HardDisk.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain.cloud;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.DomainWrapper;
-import org.jclouds.abiquo.reference.ValidationErrors;
-import org.jclouds.abiquo.reference.rest.ParentLinkName;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.server.core.cloud.VirtualDatacenterDto;
-import com.abiquo.server.core.infrastructure.storage.DiskManagementDto;
-
-/**
- * Represents a disk attached to a virtual machine.
- * <p>
- * This disks will be created when a virtual machine is deployed, and will be
- * destroyed when it is undeployed. If there is a need to use persistent
- * storage, a persistent {@link Volume} should be used instead.
- *
- * @see API: <a
- * href="http://community.abiquo.com/display/ABI20/Hard+Disks+Resource">
- * http://community.abiquo.com/display/ABI20/Hard+Disks+Resource</a>
- */
-public class HardDisk extends DomainWrapper<DiskManagementDto> {
- /** The virtual datacenter where the hard disk belongs. */
- private VirtualDatacenter virtualDatacenter;
-
- /**
- * Constructor to be used only by the builder.
- */
- protected HardDisk(final ApiContext<AbiquoApi> context, final DiskManagementDto target) {
- super(context, target);
- }
-
- // Domain operations
-
- /**
- * Creates the hard disk in the selected virtual datacenter.
- * <p>
- * Once the hard disk has been created it can be attached to a virtual
- * machine of the virtual datacenter.
- */
- public void save() {
- target = context.getApi().getCloudApi().createHardDisk(virtualDatacenter.unwrap(), target);
- }
-
- /**
- * Deletes the hard disk.
- */
- public void delete() {
- context.getApi().getCloudApi().deleteHardDisk(target);
- target = null;
- }
-
- // Parent access
-
- /**
- * Gets the virtual datacenter where the hard disk belongs to.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-RetrieveaVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource# VirtualDatacenterResource-RetrieveaVirtualDatacenter</a>
- */
- public VirtualDatacenter getVirtualDatacenter() {
- Integer virtualDatacenterId = target.getIdFromLink(ParentLinkName.VIRTUAL_DATACENTER);
- VirtualDatacenterDto dto = context.getApi().getCloudApi().getVirtualDatacenter(virtualDatacenterId);
- virtualDatacenter = wrap(context, VirtualDatacenter.class, dto);
- return virtualDatacenter;
- }
-
- // Builder
-
- public static Builder builder(final ApiContext<AbiquoApi> context, final VirtualDatacenter virtualDatacenter) {
- return new Builder(context, virtualDatacenter);
- }
-
- public static class Builder {
- private ApiContext<AbiquoApi> context;
-
- private Long sizeInMb;
-
- private VirtualDatacenter virtualDatacenter;
-
- public Builder(final ApiContext<AbiquoApi> context, final VirtualDatacenter virtualDatacenter) {
- super();
- checkNotNull(virtualDatacenter, ValidationErrors.NULL_RESOURCE + VirtualDatacenter.class);
- this.context = context;
- this.virtualDatacenter = virtualDatacenter;
- }
-
- public Builder sizeInMb(final long sizeInMb) {
- this.sizeInMb = sizeInMb;
- return this;
- }
-
- public HardDisk build() {
- DiskManagementDto dto = new DiskManagementDto();
- dto.setSizeInMb(sizeInMb);
-
- HardDisk hardDisk = new HardDisk(context, dto);
- hardDisk.virtualDatacenter = virtualDatacenter;
-
- return hardDisk;
- }
- }
-
- // Delegate methods. Since a hard disk cannot be edited, setters are not
- // visible
-
- /**
- * Returns the id of the hard disk.
- */
- public Integer getId() {
- // TODO: DiskManagementDto does not have an id field
- return target.getEditLink() == null ? null : target.getIdFromLink("edit");
- }
-
- /**
- * Returns the size of the hard disk in MB.
- */
- public Long getSizeInMb() {
- return target.getSizeInMb();
- }
-
- /**
- * Returns the sequence number of the hard disk.
- * <p>
- * It will be computed when attaching the hard disk to a virtual machine and
- * will determine the attachment order of the disk in the virtual machine.
- */
- public Integer getSequence() {
- return target.getSequence();
- }
-
- @Override
- public String toString() {
- return "HardDisk [id=" + getId() + ", sizeInMb=" + getSizeInMb() + ", sequence=" + getSequence() + "]";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java
deleted file mode 100644
index 92be637..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain.cloud;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Arrays;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.DomainWrapper;
-import org.jclouds.abiquo.domain.PaginatedCollection;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
-import org.jclouds.abiquo.domain.enterprise.Enterprise;
-import org.jclouds.abiquo.domain.task.AsyncTask;
-import org.jclouds.abiquo.domain.task.VirtualMachineTask;
-import org.jclouds.abiquo.reference.ValidationErrors;
-import org.jclouds.abiquo.reference.rest.ParentLinkName;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.model.transport.AcceptedRequestDto;
-import com.abiquo.server.core.cloud.VirtualApplianceDto;
-import com.abiquo.server.core.cloud.VirtualApplianceState;
-import com.abiquo.server.core.cloud.VirtualApplianceStateDto;
-import com.abiquo.server.core.cloud.VirtualDatacenterDto;
-import com.abiquo.server.core.cloud.VirtualMachineTaskDto;
-import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
-import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
-import com.abiquo.server.core.enterprise.EnterpriseDto;
-
-/**
- * Represents a virtual appliance.
- * <p>
- * A virtual appliance is a logic container for virtual machines that together
- * make an appliance.
- *
- * @see API: <a
- * href="http://community.abiquo.com/display/ABI20/Virtual+Appliance+Resource"
- * >
- * http://community.abiquo.com/display/ABI20/Virtual+Appliance+Resource</a>
- */
-public class VirtualAppliance extends DomainWrapper<VirtualApplianceDto> {
- /** The virtual datacenter where the virtual appliance belongs. */
- private VirtualDatacenter virtualDatacenter;
-
- /**
- * Constructor to be used only by the builder.
- */
- protected VirtualAppliance(final ApiContext<AbiquoApi> context, final VirtualApplianceDto target) {
- super(context, target);
- }
-
- // Domain operations
-
- /**
- * Deletes the virtual appliance.
- */
- public void delete() {
- context.getApi().getCloudApi().deleteVirtualAppliance(target);
- target = null;
- }
-
- /**
- * Creates the virtual appliance in the selected virtual datacenter.
- */
- public void save() {
- target = context.getApi().getCloudApi().createVirtualAppliance(virtualDatacenter.unwrap(), target);
- }
-
- /**
- * Updates the virtual appliance information when some of its properties have
- * changed.
- */
- public void update() {
- target = context.getApi().getCloudApi().updateVirtualAppliance(target);
- }
-
- // Parent access
-
- /**
- * Gets the virtual datacenter where the virtual appliance belongs to.
- *
- * @return The virtual datacenter where the virtual appliance belongs to.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-RetrieveaVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource# VirtualDatacenterResource-RetrieveaVirtualDatacenter</a>
- */
- public VirtualDatacenter getVirtualDatacenter() {
- Integer virtualDatacenterId = target.getIdFromLink(ParentLinkName.VIRTUAL_DATACENTER);
- VirtualDatacenterDto dto = context.getApi().getCloudApi().getVirtualDatacenter(virtualDatacenterId);
- virtualDatacenter = wrap(context, VirtualDatacenter.class, dto);
- return virtualDatacenter;
- }
-
- /**
- * Gets the enterprise where the virtual appliance belongs to.
- *
- * @return The enterprise where the virtual appliance belongs to.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Enterprise+Resource#EnterpriseResource-RetrieveaEnterprise"
- * > http://community.abiquo.com/display/ABI20/Enterprise+Resource#
- * EnterpriseResource- RetrieveaEnterprise</a>
- */
- public Enterprise getEnterprise() {
- Integer enterpriseId = target.getIdFromLink(ParentLinkName.ENTERPRISE);
- EnterpriseDto dto = context.getApi().getEnterpriseApi().getEnterprise(enterpriseId);
- return wrap(context, Enterprise.class, dto);
- }
-
- /**
- * Gets the current state of the virtual appliance.
- *
- * @return The current state of the virtual appliance.
- */
- public VirtualApplianceState getState() {
- VirtualApplianceStateDto stateDto = context.getApi().getCloudApi().getVirtualApplianceState(target);
- return stateDto.getPower();
- }
-
- // Children access
-
- /**
- * Gets the list of virtual machines in the virtual appliance.
- *
- * @return The list of virtual machines in the virtual appliance.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource#VirtualMachineResource-RetrievethelistofVirtualMachines."
- * > http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource#
- * VirtualMachineResource -RetrievethelistofVirtualMachines.</a>
- */
- public Iterable<VirtualMachine> listVirtualMachines() {
- PagedIterable<VirtualMachineWithNodeExtendedDto> vms = context.getApi().getCloudApi().listVirtualMachines(target);
- return wrap(context, VirtualMachine.class, vms.concat());
- }
-
- /**
- * Gets the list of virtual machines in the virtual appliance.
- *
- * @return The list of virtual machines in the virtual appliance.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource#VirtualMachineResource-RetrievethelistofVirtualMachines."
- * > http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource#
- * VirtualMachineResource -RetrievethelistofVirtualMachines.</a>
- */
- public Iterable<VirtualMachine> listVirtualMachines(final VirtualMachineOptions options) {
- PaginatedCollection<VirtualMachineWithNodeExtendedDto, VirtualMachinesWithNodeExtendedDto> vms = context.getApi()
- .getCloudApi().listVirtualMachines(target, options);
- return wrap(context, VirtualMachine.class, vms.toPagedIterable().concat());
- }
-
- /**
- * Gets a concrete virtual machine in the virtual appliance.
- *
- * @param id
- * The id of the virtual machine.
- * @return The requested virtual machine.
- */
- public VirtualMachine getVirtualMachine(final Integer id) {
- VirtualMachineWithNodeExtendedDto vm = context.getApi().getCloudApi().getVirtualMachine(target, id);
- return wrap(context, VirtualMachine.class, vm);
- }
-
- // Actions
-
- /**
- * Deploys the virtual appliance.
- * <p>
- * This method will start the deployment of all the virtual machines in the
- * virtual appliance, and will return an {@link AsyncTask} reference for each
- * deployment operation. The deployment will finish when all individual tasks
- * finish.
- *
- * @return The list of tasks corresponding to the deploy process of each
- * virtual machine in the appliance.
- */
- public VirtualMachineTask[] deploy() {
- return deploy(false);
- }
-
- /**
- * Deploys the virtual appliance.
- * <p>
- * This method will start the deployment of all the virtual machines in the
- * virtual appliance, and will return an {@link AsyncTask} reference for each
- * deploy operation. The deployment will finish when all individual tasks
- * finish.
- *
- * @param forceEnterpriseSoftLimits
- * Boolean indicating if the deployment must be executed even if
- * the enterprise soft limits are reached.
- * @return The list of tasks corresponding to the deploy process of each
- * virtual machine in the appliance.
- */
- public VirtualMachineTask[] deploy(final boolean forceEnterpriseSoftLimits) {
- VirtualMachineTaskDto force = new VirtualMachineTaskDto();
- force.setForceEnterpriseSoftLimits(forceEnterpriseSoftLimits);
-
- AcceptedRequestDto<String> response = context.getApi().getCloudApi().deployVirtualAppliance(unwrap(), force);
-
- AsyncTask<?, ?>[] tasks = getTasks(response);
- return Arrays.copyOf(tasks, tasks.length, VirtualMachineTask[].class);
- }
-
- /**
- * Undeploys the virtual appliance.
- * <p>
- * This method will start the undeploy of all the virtual machines in the
- * virtual appliance, and will return an {@link AsyncTask} reference for each
- * undeploy operation. The undeploy will finish when all individual tasks
- * finish.
- *
- * @return The list of tasks corresponding to the undeploy process of each
- * virtual machine in the appliance.
- */
- public VirtualMachineTask[] undeploy() {
- return undeploy(false);
- }
-
- /**
- * Undeploys the virtual appliance.
- * <p>
- * This method will start the undeploy of all the virtual machines in the
- * virtual appliance, and will return an {@link AsyncTask} reference for each
- * undeploy operation. The undeploy will finish when all individual tasks
- * finish.
- *
- * @param forceUndeploy
- * Boolean flag to force the undeploy even if the virtual appliance
- * contains imported virtual machines.
- * @return The list of tasks corresponding to the undeploy process of each
- * virtual machine in the appliance.
- */
- public VirtualMachineTask[] undeploy(final boolean forceUndeploy) {
- VirtualMachineTaskDto force = new VirtualMachineTaskDto();
- force.setForceUndeploy(forceUndeploy);
-
- AcceptedRequestDto<String> response = context.getApi().getCloudApi().undeployVirtualAppliance(unwrap(), force);
-
- AsyncTask<?, ?>[] tasks = getTasks(response);
- return Arrays.copyOf(tasks, tasks.length, VirtualMachineTask[].class);
- }
-
- /**
- * Returns a String message with the price info of the virtual appliance.
- *
- * @return The price of the virtual appliance
- */
- public String getPrice() {
- return context.getApi().getCloudApi().getVirtualAppliancePrice(target);
- }
-
- // Builder
-
- public static Builder builder(final ApiContext<AbiquoApi> context, final VirtualDatacenter virtualDatacenter) {
- return new Builder(context, virtualDatacenter);
- }
-
- public static class Builder {
- private ApiContext<AbiquoApi> context;
-
- private String name;
-
- private VirtualDatacenter virtualDatacenter;
-
- public Builder(final ApiContext<AbiquoApi> context, final VirtualDatacenter virtualDatacenter) {
- super();
- checkNotNull(virtualDatacenter, ValidationErrors.NULL_RESOURCE + VirtualDatacenter.class);
- this.virtualDatacenter = virtualDatacenter;
- this.context = context;
- }
-
- public Builder name(final String name) {
- this.name = name;
- return this;
- }
-
- public Builder virtualDatacenter(final VirtualDatacenter virtualDatacenter) {
- checkNotNull(virtualDatacenter, ValidationErrors.NULL_RESOURCE + VirtualDatacenter.class);
- this.virtualDatacenter = virtualDatacenter;
- return this;
- }
-
- public VirtualAppliance build() {
- VirtualApplianceDto dto = new VirtualApplianceDto();
- dto.setName(name);
-
- VirtualAppliance virtualAppliance = new VirtualAppliance(context, dto);
- virtualAppliance.virtualDatacenter = virtualDatacenter;
-
- return virtualAppliance;
- }
-
- public static Builder fromVirtualAppliance(final VirtualAppliance in) {
- return VirtualAppliance.builder(in.context, in.virtualDatacenter).name(in.getName());
- }
- }
-
- // Delegate methods
-
- public int getError() {
- return target.getError();
- }
-
- public Integer getId() {
- return target.getId();
- }
-
- public String getName() {
- return target.getName();
- }
-
- public void setHighDisponibility(final int highDisponibility) {
- target.setHighDisponibility(highDisponibility);
- }
-
- public void setName(final String name) {
- target.setName(name);
- }
-
- public void setPublicApp(final int publicApp) {
- target.setPublicApp(publicApp);
- }
-
- @Override
- public String toString() {
- return "VirtualAppliance [id=" + getId() + ", name=" + getName() + "]";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java
deleted file mode 100644
index 36321aa..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * 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.jclouds.abiquo.domain.cloud;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.find;
-
-import org.jclouds.abiquo.AbiquoApi;
-import org.jclouds.abiquo.domain.DomainWithLimitsWrapper;
-import org.jclouds.abiquo.domain.PaginatedCollection;
-import org.jclouds.abiquo.domain.builder.LimitsBuilder;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions;
-import org.jclouds.abiquo.domain.cloud.options.VolumeOptions;
-import org.jclouds.abiquo.domain.enterprise.Enterprise;
-import org.jclouds.abiquo.domain.infrastructure.Datacenter;
-import org.jclouds.abiquo.domain.infrastructure.Tier;
-import org.jclouds.abiquo.domain.network.ExternalNetwork;
-import org.jclouds.abiquo.domain.network.Network;
-import org.jclouds.abiquo.domain.network.PrivateNetwork;
-import org.jclouds.abiquo.domain.network.PublicIp;
-import org.jclouds.abiquo.reference.ValidationErrors;
-import org.jclouds.abiquo.reference.rest.ParentLinkName;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.rest.ApiContext;
-
-import com.abiquo.model.enumerator.HypervisorType;
-import com.abiquo.model.enumerator.NetworkType;
-import com.abiquo.model.enumerator.StatefulInclusion;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
-import com.abiquo.server.core.cloud.VirtualApplianceDto;
-import com.abiquo.server.core.cloud.VirtualAppliancesDto;
-import com.abiquo.server.core.cloud.VirtualDatacenterDto;
-import com.abiquo.server.core.infrastructure.network.PublicIpDto;
-import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
-import com.abiquo.server.core.infrastructure.network.VLANNetworksDto;
-import com.abiquo.server.core.infrastructure.storage.DiskManagementDto;
-import com.abiquo.server.core.infrastructure.storage.DisksManagementDto;
-import com.abiquo.server.core.infrastructure.storage.TierDto;
-import com.abiquo.server.core.infrastructure.storage.TiersDto;
-import com.abiquo.server.core.infrastructure.storage.VolumeManagementDto;
-import com.abiquo.server.core.infrastructure.storage.VolumesManagementDto;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-
-/**
- * Represents a virtual datacenter.
- * <p>
- * Virtual datacenters expose a set of compute, storage and networking resources
- * that can be consumed by the tenants.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource">
- * http
- * ://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource</a>
- */
-public class VirtualDatacenter extends DomainWithLimitsWrapper<VirtualDatacenterDto> {
- /** The enterprise where the rack belongs. */
- private Enterprise enterprise;
-
- /** The datacenter where the virtual datacenter will be deployed. */
- private Datacenter datacenter;
-
- /**
- * Constructor to be used only by the builder.
- */
- protected VirtualDatacenter(final ApiContext<AbiquoApi> context, final VirtualDatacenterDto target) {
- super(context, target);
- }
-
- // Domain operations
-
- /**
- * Delete the virtual datacenter.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-DeleteanexistingVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource#
- * VirtualDatacenterResource-DeleteanexistingVirtualDatacenter</a>
- */
- public void delete() {
- context.getApi().getCloudApi().deleteVirtualDatacenter(target);
- target = null;
- }
-
- /**
- * Creates the virtual datacenter.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-CreateanewVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource# VirtualDatacenterResource-CreateanewVirtualDatacenter</a>
- */
- public void save() {
- target = context.getApi().getCloudApi().createVirtualDatacenter(target, datacenter.unwrap(), enterprise.unwrap());
- }
-
- /**
- * Updates the virtual datacenter information when some of its properties
- * have changed.
- *
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-UpdatesanexistingVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource#
- * VirtualDatacenterResource-UpdatesanexistingVirtualDatacenter</a>
- */
- public void update() {
- target = context.getApi().getCloudApi().updateVirtualDatacenter(target);
- }
-
- // Parent access
-
- /**
- * Gets the datacenter where this virtual datacenter is assigned.
- *
- * @return The datacenter where this virtual datacenter is assigned.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Datacenter+Resource#DatacenterResource-RetrieveaDatacenter"
- * > http://community.abiquo.com/display/ABI20/Datacenter+Resource#
- * DatacenterResource- RetrieveaDatacenter</a>
- */
- public Datacenter getDatacenter() {
- final Integer datacenterId = target.getIdFromLink(ParentLinkName.DATACENTER);
- datacenter = find(getEnterprise().listAllowedDatacenters(), new Predicate<Datacenter>() {
- @Override
- public boolean apply(Datacenter input) {
- return input.getId().equals(datacenterId);
- }
- });
- return datacenter;
- }
-
- /**
- * Gets the enterprise that owns this virtual datacenter.
- *
- * @return The enterprise that owns this virtual datacenter.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Enterprise+Resource#EnterpriseResource-RetrieveanEnterprise"
- * > http://community.abiquo.com/display/ABI20/Enterprise+Resource#
- * EnterpriseResource- RetrieveanEnterprise</a>
- */
- public Enterprise getEnterprise() {
- Integer enterpriseId = target.getIdFromLink(ParentLinkName.ENTERPRISE);
- enterprise = wrap(context, Enterprise.class, context.getApi().getEnterpriseApi().getEnterprise(enterpriseId));
- return enterprise;
- }
-
- // Children access
-
- /**
- * Lists all the virtual appliances in the virtual datacenter.
- *
- * @return The list of virtual appliances in the virtual datacenter.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Appliance+Resource#VirtualApplianceResource-RetrievethelistofVirtualAppliances"
- * >http://community.abiquo.com/display/ABI20/Virtual+Appliance+Resource
- * # VirtualApplianceResource-RetrievethelistofVirtualAppliances</a>
- */
- public Iterable<VirtualAppliance> listVirtualAppliances() {
- VirtualAppliancesDto vapps = context.getApi().getCloudApi().listVirtualAppliances(target);
- return wrap(context, VirtualAppliance.class, vapps.getCollection());
- }
-
- /**
- * Gets the virtual appliance with the given id in the current virtual
- * datacenter.
- *
- * @param id
- * The id of the virtual appliance to get.
- * @return The virtual appliance.
- */
- public VirtualAppliance getVirtualAppliance(final Integer id) {
- VirtualApplianceDto vapp = context.getApi().getCloudApi().getVirtualAppliance(target, id);
- return wrap(context, VirtualAppliance.class, vapp);
- }
-
- /**
- * Lists the storage tiers that are available to the virtual datacenter.
- *
- * @return The list of storage tiers that are available to the virtual
- * datacenter.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-Retrieveenabledtiers"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource# VirtualDatacenterResource-Retrieveenabledtiers</a>
- */
- public Iterable<Tier> listStorageTiers() {
- TiersDto tiers = context.getApi().getCloudApi().listStorageTiers(target);
- return wrap(context, Tier.class, tiers.getCollection());
- }
-
- /**
- * Gets the storage tier with the given id from the current virtual
- * datacenter.
- *
- * @param id
- * The id of the storage tier.
- * @return The storage tier.
- */
- public Tier getStorageTier(final Integer id) {
- TierDto tier = context.getApi().getCloudApi().getStorageTier(target, id);
- return wrap(context, Tier.class, tier);
- }
-
- /**
- * Lists all persistent volumes in the virtual datacenter.
- *
- * @return The list of all persistent volumes in the virtual datacenter.
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Volume+Resource#VolumeResource-Retrievethelistofvolumes"
- * > http://community.abiquo.com/display/ABI20/Volume+Resource#
- * VolumeResource- Retrievethelistofvolumes</a>
- */
- public Iterable<Volume> listVolumes() {
- PagedIterable<VolumeManagementDto> volumes = context.getApi().getCloudApi().listVolumes(target);
- return wrap(context, Volume.class, volumes.concat());
- }
-
- public Iterable<Volume> listVolumes(VolumeOptions options) {
- PaginatedCollection<VolumeManagementDto, VolumesManagementDto> volumes = context.getApi().getCloudApi()
- .listVolumes(target, options);
- return wrap(context, Volume.class, volumes.toPagedIterable().concat());
- }
-
- public Volume getVolume(final Integer id) {
- VolumeManagementDto volume = context.getApi().getCloudApi().getVolume(target, id);
- return wrap(context, Volume.class, volume);
- }
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Hard+Disks+Resource#HardDisksResource-GetthelistofHardDisksofaVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Hard+Disks+Resource#
- * HardDisksResource- GetthelistofHardDisksofaVirtualDatacenter</a>
- */
- public Iterable<HardDisk> listHardDisks() {
- DisksManagementDto hardDisks = context.getApi().getCloudApi().listHardDisks(target);
- return wrap(context, HardDisk.class, hardDisks.getCollection());
- }
-
- public HardDisk getHardDisk(final Integer id) {
- DiskManagementDto hardDisk = context.getApi().getCloudApi().getHardDisk(target, id);
- return wrap(context, HardDisk.class, hardDisk);
- }
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-GetdefaultVLANusedbydefaultinVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource#
- * VirtualDatacenterResource-GetdefaultVLANusedbydefaultinVirtualDatacenter
- * </a>
- */
- public Network<?> getDefaultNetwork() {
- VLANNetworkDto network = context.getApi().getCloudApi().getDefaultNetwork(target);
- return wrap(context, network.getType() == NetworkType.INTERNAL ? PrivateNetwork.class : ExternalNetwork.class,
- network);
- }
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Private+Network+Resource#PrivateNetworkResource-RetrievealistofPrivateNetworks"
- * > http://community.abiquo.com/display/ABI20/Private+Network+Resource#
- * PrivateNetworkResource -RetrievealistofPrivateNetworks</a>
- */
- public Iterable<PrivateNetwork> listPrivateNetworks() {
- VLANNetworksDto networks = context.getApi().getCloudApi().listPrivateNetworks(target);
- return wrap(context, PrivateNetwork.class, networks.getCollection());
- }
-
- public PrivateNetwork getPrivateNetwork(final Integer id) {
- VLANNetworkDto network = context.getApi().getCloudApi().getPrivateNetwork(target, id);
- return wrap(context, PrivateNetwork.class, network);
- }
-
- public Iterable<VirtualMachineTemplate> listAvailableTemplates() {
- PagedIterable<VirtualMachineTemplateDto> templates = context.getApi().getCloudApi()
- .listAvailableTemplates(target);
- return wrap(context, VirtualMachineTemplate.class, templates.concat());
- }
-
- public Iterable<VirtualMachineTemplate> listAvailableTemplates(final VirtualMachineTemplateOptions options) {
- PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> templates = context.getApi()
- .getCloudApi().listAvailableTemplates(target, options);
- return wrap(context, VirtualMachineTemplate.class, templates.toPagedIterable().concat());
- }
-
- public VirtualMachineTemplate getAvailableTemplate(final Integer id) {
- PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> templates = context.getApi()
- .getCloudApi()
- .listAvailableTemplates(target, VirtualMachineTemplateOptions.builder().idTemplate(id).build());
-
- FluentIterable<VirtualMachineTemplateDto> all = templates.toPagedIterable().concat();
- return wrap(context, VirtualMachineTemplate.class, all.first().orNull());
- }
-
- public VirtualMachineTemplate getAvailablePersistentTemplate(final Integer id) {
- PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> templates = context
- .getApi()
- .getCloudApi()
- .listAvailableTemplates(target,
- VirtualMachineTemplateOptions.builder().idTemplate(id).persistent(StatefulInclusion.ALL).build());
-
- FluentIterable<VirtualMachineTemplateDto> all = templates.toPagedIterable().concat();
- return wrap(context, VirtualMachineTemplate.class, all.first().orNull());
- }
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-ListofPublicIPstopurchasebyVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource#
- * VirtualDatacenterResource-ListofPublicIPstopurchasebyVirtualDatacenter
- * </a>
- */
- public Iterable<PublicIp> listAvailablePublicIps() {
- PagedIterable<PublicIpDto> ips = context.getApi().getCloudApi().listAvailablePublicIps(target);
- return wrap(context, PublicIp.class, ips.concat());
- }
-
- /**
- * @see API: <a href=
- * "http://community.abiquo.com/display/ABI20/Virtual+Datacenter+Resource#VirtualDatacenterResource-ListofpurchasedPublicIPsbyVirtualDatacenter"
- * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+
- * Resource#
- * VirtualDatacenterResource-ListofpurchasedPublicIPsbyVirtualDatacenter
- * </a>
- */
- public Iterable<PublicIp> listPurchasedPublicIps() {
- PagedIterable<PublicIpDto> ips = context.getApi().getCloudApi().listPurchasedPublicIps(target);
- return wrap(context, PublicIp.class, ips.concat());
- }
-
- public void purchasePublicIp(final PublicIp ip) {
- checkNotNull(ip.unwrap().searchLink("purchase"), ValidationErrors.MISSING_REQUIRED_LINK);
- context.getApi().getCloudApi().purchasePublicIp(ip.unwrap());
- }
-
- public void releasePublicIp(final PublicIp ip) {
- checkNotNull(ip.unwrap().searchLink("release"), ValidationErrors.MISSING_REQUIRED_LINK);
- context.getApi().getCloudApi().releasePublicIp(ip.unwrap());
- }
-
- // Actions
-
- public void setDefaultNetwork(final Network<?> network) {
- context.getApi().getCloudApi().setDefaultNetwork(target, network.unwrap());
- }
-
- // Builder
-
- public static Builder builder(final ApiContext<AbiquoApi> context, final Datacenter datacenter,
- final Enterprise enterprise) {
- return new Builder(context, datacenter, enterprise);
- }
-
- public static class Builder extends LimitsBuilder<Builder> {
- private ApiContext<AbiquoApi> context;
-
- private String name;
-
- private HypervisorType hypervisorType;
-
- private Enterprise enterprise;
-
- private Datacenter datacenter;
-
- private PrivateNetwork network;
-
- public Builder(final ApiContext<AbiquoApi> context, final Datacenter datacenter, final Enterprise enterprise) {
- super();
- checkNotNull(datacenter, ValidationErrors.NULL_RESOURCE + Datacenter.class);
- this.datacenter = datacenter;
- checkNotNull(enterprise, ValidationErrors.NULL_RESOURCE + Enterprise.class);
- this.enterprise = enterprise;
- this.context = context;
- }
-
- public Builder name(final String name) {
- this.name = name;
- return this;
- }
-
- public Builder hypervisorType(final HypervisorType hypervisorType) {
- this.hypervisorType = hypervisorType;
- return this;
- }
-
- public Builder datacenter(final Datacenter datacenter) {
- checkNotNull(datacenter, ValidationErrors.NULL_RESOURCE + Datacenter.class);
- this.datacenter = datacenter;
- return this;
- }
-
- public Builder enterprise(final Enterprise enterprise) {
- checkNotNull(enterprise, ValidationErrors.NULL_RESOURCE + Enterprise.class);
- this.enterprise = enterprise;
- return this;
- }
-
- public Builder network(final PrivateNetwork network) {
- checkNotNull(network, ValidationErrors.NULL_RESOURCE + PrivateNetwork.class);
- this.network = network;
- return this;
- }
-
- public VirtualDatacenter build() {
- VirtualDatacenterDto dto = new VirtualDatacenterDto();
- dto.setName(name);
- dto.setRamLimitsInMb(ramSoftLimitInMb, ramHardLimitInMb);
- dto.setCpuCountLimits(cpuCountSoftLimit, cpuCountHardLimit);
- dto.setHdLimitsInMb(hdSoftLimitInMb, hdHardLimitInMb);
- dto.setStorageLimits(storageSoft, storageHard);
- dto.setVlansLimits(vlansSoft, vlansHard);
- dto.setPublicIPLimits(publicIpsSoft, publicIpsHard);
- dto.setName(name);
- dto.setHypervisorType(hypervisorType);
- dto.setVlan(network.unwrap());
-
- VirtualDatacenter virtualDatacenter = new VirtualDatacenter(context, dto);
- virtualDatacenter.datacenter = datacenter;
- virtualDatacenter.enterprise = enterprise;
-
- return virtualDatacenter;
- }
-
- public static Builder fromVirtualDatacenter(final VirtualDatacenter in) {
- return VirtualDatacenter.builder(in.context, in.datacenter, in.enterprise).name(in.getName())
- .ramLimits(in.getRamSoftLimitInMb(), in.getRamHardLimitInMb())
- .cpuCountLimits(in.getCpuCountSoftLimit(), in.getCpuCountHardLimit())
- .hdLimitsInMb(in.getHdSoftLimitInBytes(), in.getHdHardLimitInBytes())
- .storageLimits(in.getStorageSoft(), in.getStorageHard())
- .vlansLimits(in.getVlansSoft(), in.getVlansHard())
- .publicIpsLimits(in.getPublicIpsSoft(), in.getPublicIpsHard()).hypervisorType(in.getHypervisorType());
- }
- }
-
- // Delegate methods
-
- public HypervisorType getHypervisorType() {
- return target.getHypervisorType();
- }
-
- public Integer getId() {
- return target.getId();
- }
-
- public String getName() {
- return target.getName();
- }
-
- public void setHypervisorType(final HypervisorType hypervisorType) {
- target.setHypervisorType(hypervisorType);
- }
-
- public void setName(final String name) {
- target.setName(name);
- }
-
- @Override
- public String toString() {
- return "VirtualDatacenter [id=" + getId() + ", type=" + getHypervisorType() + ", name=" + getName() + "]";
- }
-
-}