Search in sources :

Example 1 with Filter

use of org.platformlayer.Filter in project platformlayer by platformlayer.

the class DirectPlatformLayerClient method listChildrenTyped.

@Override
public List<ItemBase> listChildrenTyped(PlatformLayerKey parentKey, boolean includeDeleted) throws OpsException {
    parentKey = resolveKey(parentKey);
    Tag parentTag = Tag.buildParentTag(parentKey);
    Filter filter = TagFilter.byTag(parentTag);
    if (!includeDeleted) {
        filter = StateFilter.excludeDeleted(filter);
    }
    List<ItemBase> items = itemService.listAll(auth, filter);
    return items;
}
Also used : StateFilter(org.platformlayer.StateFilter) TagFilter(org.platformlayer.TagFilter) Filter(org.platformlayer.Filter) ItemBase(org.platformlayer.core.model.ItemBase) Tag(org.platformlayer.core.model.Tag)

Example 2 with Filter

use of org.platformlayer.Filter in project platformlayer by platformlayer.

the class SolrClusterController method getMachines.

@Override
public List<Machine> getMachines(boolean required) throws OpsException {
    Filter parentFilter = TagFilter.byTag(Tag.buildParentTag(model.getKey()));
    List<Machine> machines = Lists.newArrayList();
    for (SolrServer server : platformLayer.listItems(SolrServer.class, parentFilter)) {
        Machine machine = instances.getMachine(server, required);
        if (machine != null) {
            machines.add(machine);
        }
    }
    return machines;
}
Also used : TagFilter(org.platformlayer.TagFilter) Filter(org.platformlayer.Filter) SolrServer(org.platformlayer.service.solr.model.SolrServer) Machine(org.platformlayer.ops.Machine)

Example 3 with Filter

use of org.platformlayer.Filter in project platformlayer by platformlayer.

the class ItemServiceImpl method ensureItem.

<T extends ItemBase> T ensureItem(final ProjectAuthorization auth, final T item, final boolean canExist, final boolean generateUniqueName, final String uniqueTagKey) throws OpsException {
    final ModelClass<T> modelClass = (ModelClass<T>) serviceProviderDirectory.getModelClass(item.getClass());
    if (modelClass == null) {
        throw new IllegalStateException("Unknown item type");
    }
    final Class<T> javaClass = modelClass.getJavaClass();
    // JaxbHelper jaxbHelper = JaxbHelper.get(javaClass);
    final ServiceProvider serviceProvider = modelClass.getProvider();
    String id = item.getId();
    if (Strings.isNullOrEmpty(id)) {
        if (generateUniqueName) {
            id = serviceProvider.buildItemId(modelClass, item);
        } else {
            // otherwise we end up with lots of randomly named items
            throw new OpsException("Must specify item id");
        // id = UUID.randomUUID().toString();
        // item.setId(id);
        }
    }
    ProjectId project = getProjectId(auth);
    PlatformLayerKey itemKey = new PlatformLayerKey(null, project, modelClass.getServiceType(), modelClass.getItemType(), new ManagedItemId(id));
    item.setKey(itemKey);
    item.state = ManagedItemState.CREATION_REQUESTED;
    final OpsContext opsContext = buildTemporaryOpsContext(modelClass.getServiceType(), auth);
    T created = OpsContext.runInContext(opsContext, new CheckedCallable<T, Exception>() {

        @Override
        public T call() throws Exception {
            PlatformLayerKey itemKey = item.getKey();
            T existing;
            SecretProvider secretProvider = SecretProvider.from(auth);
            if (uniqueTagKey != null) {
                boolean fetchTags = true;
                Tag uniqueTag = null;
                for (Tag tag : item.getTags()) {
                    if (Objects.equal(tag.getKey(), uniqueTagKey)) {
                        uniqueTag = tag;
                    }
                }
                if (uniqueTag == null) {
                    throw new IllegalArgumentException("Could not find unique tag");
                }
                Filter filter = TagFilter.byTag(uniqueTag);
                filter = StateFilter.excludeDeleted(filter);
                existing = null;
                List<T> existingList = repository.findAll(modelClass, itemKey.getProject(), fetchTags, secretProvider, filter);
                if (!existingList.isEmpty()) {
                    if (existingList.size() != 1) {
                        throw new IllegalArgumentException("Found multiple items with unique tag");
                    }
                    existing = existingList.get(0);
                }
                if (existing == null) {
                    itemKey = findUniqueId(item, itemKey, secretProvider);
                }
            } else {
                if (generateUniqueName) {
                    itemKey = findUniqueId(item, itemKey, secretProvider);
                }
                try {
                    boolean fetchTags = true;
                    existing = Casts.checkedCast(repository.getManagedItem(itemKey, fetchTags, secretProvider), javaClass);
                } catch (RepositoryException e) {
                    throw new OpsException("Error fetching item from database", e);
                }
            }
            if (!canExist && existing != null) {
                throw new OpsException("Item already exists");
            }
            serviceProvider.beforeCreateItem(item);
            ProjectId project = getProjectId(auth);
            T newItem;
            try {
                if (existing == null) {
                    newItem = repository.createManagedItem(project, item);
                } else {
                    item.secret = existing.secret;
                    item.setKey(existing.getKey());
                    newItem = repository.updateManagedItem(project, item);
                    TagChanges tagChanges = new TagChanges();
                    for (Tag tag : item.getTags()) {
                        if (newItem.getTags().hasTag(tag)) {
                            continue;
                        }
                        boolean uniqueTagKey = false;
                        if (tag.getKey().equals(Tag.PARENT.getKey())) {
                            uniqueTagKey = true;
                        }
                        tagChanges.addTags.add(tag);
                        if (uniqueTagKey) {
                            for (Tag oldTag : newItem.getTags().findTags(tag.getKey())) {
                                tagChanges.removeTags.add(oldTag);
                            }
                        }
                    }
                    if (!tagChanges.isEmpty()) {
                        repository.changeTags(modelClass, project, newItem.getKey().getItemId(), tagChanges, null);
                    }
                }
            } catch (RepositoryException e) {
                throw new OpsException("Error writing object to database", e);
            }
            itemKey = newItem.getKey();
            JobData jobKey = changeQueue.notifyChange(auth, itemKey, ManagedItemState.CREATION_REQUESTED);
            return newItem;
        }

        private <T extends ItemBase> PlatformLayerKey findUniqueId(final T item, final PlatformLayerKey itemKey, SecretProvider secretProvider) throws RepositoryException {
            int sequence = 0;
            while (true) {
                String tryId = item.getId();
                if (sequence != 0) {
                    tryId += sequence;
                }
                final PlatformLayerKey tryKey = itemKey.withId(new ManagedItemId(tryId));
                boolean fetchTags = false;
                ItemBase found = repository.getManagedItem(tryKey, fetchTags, secretProvider);
                if (found == null) {
                    item.setKey(tryKey);
                    return tryKey;
                }
                sequence++;
            }
        }
    });
    return created;
}
Also used : OpsException(org.platformlayer.ops.OpsException) ItemBase(org.platformlayer.core.model.ItemBase) ProjectId(org.platformlayer.ids.ProjectId) PlatformLayerKey(org.platformlayer.core.model.PlatformLayerKey) RepositoryException(org.platformlayer.RepositoryException) OpsContext(org.platformlayer.ops.OpsContext) TagChanges(org.platformlayer.core.model.TagChanges) ManagedItemId(org.platformlayer.ids.ManagedItemId) RepositoryException(org.platformlayer.RepositoryException) OpsException(org.platformlayer.ops.OpsException) ModelClass(org.platformlayer.xaas.services.ModelClass) StateFilter(org.platformlayer.StateFilter) TagFilter(org.platformlayer.TagFilter) Filter(org.platformlayer.Filter) ServiceProvider(org.platformlayer.xaas.services.ServiceProvider) List(java.util.List) Tag(org.platformlayer.core.model.Tag) JobData(org.platformlayer.jobs.model.JobData) SecretProvider(org.platformlayer.auth.crypto.SecretProvider)

Example 4 with Filter

use of org.platformlayer.Filter in project platformlayer by platformlayer.

the class ManagedItemResource method listChildren.

@GET
@Produces({ XML, JSON })
@Path("children")
public ManagedItemCollection<ItemBase> listChildren(@QueryParam("deleted") boolean includeDeleted) throws OpsException, RepositoryException {
    boolean fetchTags = true;
    ItemBase item = getManagedItem(fetchTags);
    Tag parentTag = Tag.buildParentTag(item.getKey());
    Filter filter = TagFilter.byTag(parentTag);
    if (!includeDeleted) {
        filter = StateFilter.excludeDeleted(filter);
    }
    List<ItemBase> roots = itemService.listAll(getProjectAuthorization(), filter);
    ManagedItemCollection<ItemBase> collection = new ManagedItemCollection<ItemBase>();
    collection.items = roots;
    return cleanup(collection);
}
Also used : ItemBase(org.platformlayer.core.model.ItemBase) StateFilter(org.platformlayer.StateFilter) TagFilter(org.platformlayer.TagFilter) Filter(org.platformlayer.Filter) ManagedItemCollection(org.platformlayer.core.model.ManagedItemCollection) Tag(org.platformlayer.core.model.Tag) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 5 with Filter

use of org.platformlayer.Filter in project platformlayer by platformlayer.

the class InstanceSupervisor method findPersistentInstance.

public PersistentInstance findPersistentInstance(Tag tag) throws OpsException {
    Filter filter = TagFilter.byTag(tag);
    filter = StateFilter.excludeDeleted(filter);
    List<PersistentInstance> instances = Lists.newArrayList(platformLayer.listItems(PersistentInstance.class, filter));
    if (instances.size() == 0) {
        return null;
    }
    if (instances.size() != 1) {
        throw new OpsException("Found multiple instances with tag: " + tag);
    }
    return instances.get(0);
}
Also used : OpsException(org.platformlayer.ops.OpsException) PersistentInstance(org.platformlayer.instances.model.PersistentInstance) StateFilter(org.platformlayer.StateFilter) TagFilter(org.platformlayer.TagFilter) Filter(org.platformlayer.Filter)

Aggregations

Filter (org.platformlayer.Filter)5 TagFilter (org.platformlayer.TagFilter)5 StateFilter (org.platformlayer.StateFilter)4 ItemBase (org.platformlayer.core.model.ItemBase)3 Tag (org.platformlayer.core.model.Tag)3 OpsException (org.platformlayer.ops.OpsException)2 List (java.util.List)1 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 RepositoryException (org.platformlayer.RepositoryException)1 SecretProvider (org.platformlayer.auth.crypto.SecretProvider)1 ManagedItemCollection (org.platformlayer.core.model.ManagedItemCollection)1 PlatformLayerKey (org.platformlayer.core.model.PlatformLayerKey)1 TagChanges (org.platformlayer.core.model.TagChanges)1 ManagedItemId (org.platformlayer.ids.ManagedItemId)1 ProjectId (org.platformlayer.ids.ProjectId)1 PersistentInstance (org.platformlayer.instances.model.PersistentInstance)1 JobData (org.platformlayer.jobs.model.JobData)1 Machine (org.platformlayer.ops.Machine)1