/*
* Copyright (c) 2010-2013 Evolveum
*
* 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.evolveum.midpoint.web.page.admin.resources.dto;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.web.component.data.column.InlineMenuable;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.Validate;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.web.component.util.Selectable;
import javax.xml.namespace.QName;
/**
* @author lazyman
*/
public class ResourceDto extends Selectable implements InlineMenuable {
private static final String DOT_CLASS = ResourceDto.class.getName() + ".";
private static final String OPERATION_LOAD_RESOURCE_DEFINITION = DOT_CLASS + "ResourceDto - load resource attribute container definition";
private String oid;
private String name;
private String bundle;
private String version;
private String progress;
private String type;
private ResourceState state;
private AvailabilityStatusType lastAvailabilityStatus;
private List<ResourceObjectTypeDto> objectTypes;
private List<String> capabilities;
private ResourceSync sync;
private ResourceImport resImport;
private QName defaultAccountObjectClass;
private List<InlineMenuItem> menuItems;
public ResourceDto() {
}
public ResourceDto(PrismObject<ResourceType> resource) {
oid = resource.getOid();
name = WebComponentUtil.getName(resource);
PrismReference ref = resource.findReference(ResourceType.F_CONNECTOR_REF);
ConnectorType connector = null;
if (ref != null && ref.getValue().getObject() != null) {
connector = (ConnectorType) ref.getValue().getObject().asObjectable();
}
bundle = connector != null ? connector.getConnectorBundle() : null;
version = connector != null ? connector.getConnectorVersion() : null;
type = connector != null ? connector.getConnectorType() : null;
lastAvailabilityStatus = resource.asObjectable().getOperationalState() != null ? resource.asObjectable().getOperationalState().getLastAvailabilityStatus() : null;
if(resource.asObjectable().getFetchResult() != null && resource.asObjectable().getFetchResult().getStatus() != null){
if(OperationResultStatusType.PARTIAL_ERROR.equals(resource.asObjectable().getFetchResult().getStatus())){
lastAvailabilityStatus = null;
}
}
}
public ResourceDto(PrismObject<ResourceType> resource, PrismContext prismContext, ConnectorType connector, List<String> capabilities) {
Validate.notNull(resource);
OperationResult result = new OperationResult(OPERATION_LOAD_RESOURCE_DEFINITION);
oid = resource.getOid();
name = WebComponentUtil.getName(resource);
bundle = connector != null ? connector.getConnectorBundle() : null;
version = connector != null ? connector.getConnectorVersion() : null;
type = connector != null ? connector.getConnectorType() : null;
this.capabilities = capabilities;
try {
ResourceSchema resourceSchema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext);
Collection<ObjectClassComplexTypeDefinition> definitions = resourceSchema.getObjectClassDefinitions();
for (ObjectClassComplexTypeDefinition definition : definitions) {
if (!(definition instanceof ObjectClassComplexTypeDefinition)) {
continue;
}
if(objectTypes == null){
objectTypes = new ArrayList<ResourceObjectTypeDto>();
}
objectTypes.add(new ResourceObjectTypeDto(definition));
}
//default account object class qname
ObjectClassComplexTypeDefinition def = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT);
defaultAccountObjectClass = def.getTypeName();
} catch (Exception ex) {
result.recordFatalError("Couldn't load resource attribute container definition.", ex);
}
}
public QName getDefaultAccountObjectClass() {
return defaultAccountObjectClass;
}
public String getBundle() {
return bundle;
}
public String getName() {
return name;
}
public String getOid() {
return oid;
}
public String getVersion() {
return version;
}
public String getProgress() {
return progress;
}
public String getType() {
return type;
}
public List<String> getCapabilities() {
return capabilities;
}
public ResourceState getState() {
if (state == null) {
state = new ResourceState();
}
return state;
}
public OperationResultStatus getOverallStatus() {
if (state == null) {
return OperationResultStatus.UNKNOWN;
}
return state.getOverall();
}
public AvailabilityStatusType getLastAvailabilityStatus() {
return lastAvailabilityStatus;
}
public List<ResourceObjectTypeDto> getObjectTypes() {
if (objectTypes == null) {
objectTypes = new ArrayList<ResourceObjectTypeDto>();
}
return objectTypes;
}
public ResourceSyncStatus getSyncStatus() {
if (sync == null || !sync.isEnabled()) {
return ResourceSyncStatus.DISABLE;
}
return ResourceSyncStatus.ENABLE;
}
public ResourceImportStatus getResImport() {
if (resImport == null || !resImport.isEnabled()) {
return ResourceImportStatus.DISABLE;
}
return ResourceImportStatus.ENABLE;
}
@Override
public List<InlineMenuItem> getMenuItems() {
if (menuItems == null) {
menuItems = new ArrayList<InlineMenuItem>();
}
return menuItems;
}
}