Skip to content

Commit

Permalink
Merge branch 'master' of git://git.evolveum.com/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Mar 3, 2014
2 parents 9f2709e + 3cc3c2c commit 68b684f
Show file tree
Hide file tree
Showing 76 changed files with 4,100 additions and 102 deletions.
33 changes: 33 additions & 0 deletions gui/admin-gui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,39 @@
<artifactId>wicket-datetime</artifactId>
</dependency>

<!-- Xtext DSL
<dependency>
<groupId>com.evolveum.midpoint.msl</groupId>
<artifactId>com.evolveum.midpoint.msl</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.xtend</groupId>
<artifactId>org.eclipse.xtend.lib</artifactId>
<version>2.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.xtext</groupId>
<artifactId>org.eclipse.xtext.dependencies</artifactId>
<version>2.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.xtext</groupId>
<artifactId>org.eclipse.xtext.xbase</artifactId>
<version>2.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.xtext</groupId>
<artifactId>org.eclipse.xtext</artifactId>
<version>2.5.1</version>
<scope>runtime</scope>
</dependency>
-->

<!-- TEST -->
<dependency>
<groupId>com.evolveum.midpoint.repo</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* Copyright (c) 2010-2014 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.common.refinery;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.schema.PrismSchema;
import com.evolveum.midpoint.schema.processor.ConnectorSchema;
import com.evolveum.midpoint.schema.util.ConnectorTypeUtil;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ConnectorType;
import org.w3c.dom.Element;

/**
* @author semancik
*
*/
public class RefinedConnectorSchema extends PrismSchema implements DebugDumpable {

private static final String USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA = RefinedConnectorSchema.class.getName()+".parsedConnectorSchema";

protected RefinedConnectorSchema(PrismContext prismContext) {
super(prismContext);
}

public static ConnectorSchema getConnectorSchema(ConnectorType connectorType, PrismContext prismContext) throws SchemaException {
PrismObject<ConnectorType> connector = connectorType.asPrismObject();
return getConnectorSchema(connector, prismContext);
}

public static ConnectorSchema getConnectorSchema(PrismObject<ConnectorType> connector, PrismContext prismContext) throws SchemaException {
Element connectorXsdSchema = ConnectorTypeUtil.getConnectorXsdSchema(connector);
if (connectorXsdSchema == null) {
return null;
}
Object userDataEntry = connector.getUserData(USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA);
if (userDataEntry != null) {
if (userDataEntry instanceof ConnectorSchema) {
return (ConnectorSchema)userDataEntry;
} else {
throw new IllegalStateException("Expected ConnectorSchema under user data key "+
USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA + "in "+connector+", but got "+userDataEntry.getClass());
}
} else {
//InternalMonitor.recordConnectorSchemaParse();
ConnectorSchema parsedSchema = ConnectorSchema.parse(connectorXsdSchema, "connector schema of "+connector, prismContext);
if (parsedSchema == null) {
throw new IllegalStateException("Parsed schema is null: most likely an internall error");
}
parsedSchema.setUsualNamespacePrefix(ConnectorSchema.retrieveUsualNamespacePrefix(connector.asObjectable()));
connector.setUserData(USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA, parsedSchema);
return parsedSchema;
}
}

public static void setParsedConnectorSchemaConditional(ConnectorType connectorType, ConnectorSchema parsedSchema) {
if (hasParsedSchema(connectorType)) {
return;
}
PrismObject<ConnectorType> connector = connectorType.asPrismObject();
connector.setUserData(USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA, parsedSchema);
}

public static boolean hasParsedSchema(ConnectorType connectorType) {
PrismObject<ConnectorType> connector = connectorType.asPrismObject();
return connector.getUserData(USER_DATA_KEY_PARSED_CONNECTOR_SCHEMA) != null;
}

@Override
public String toString() {
return "rSchema(ns=" + namespace + ")";
}

}
20 changes: 12 additions & 8 deletions infra/common/src/main/resources/ctx-common.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,18 @@
~ limitations under the License.
-->
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
default-autowire="byName">

<bean id="matchingRuleRegistry" class="com.evolveum.midpoint.prism.match.MatchingRuleRegistryFactory"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byName">

<context:annotation-config/>
<context:component-scan base-package="com.evolveum.midpoint.common"/>
<context:spring-configured/>

<bean id="matchingRuleRegistry" class="com.evolveum.midpoint.prism.match.MatchingRuleRegistryFactory"
factory-method="createRegistry">
</bean>

Expand Down
24 changes: 23 additions & 1 deletion infra/prism/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,29 @@
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>


<!-- Xtext
<dependency>
<groupId>com.evolveum.midpoint.msl</groupId>
<artifactId>com.evolveum.midpoint.msl</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.eclipse.xtend</groupId>
<artifactId>org.eclipse.xtend.lib</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.xtext</groupId>
<artifactId>org.eclipse.xtext.dependencies</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.xtext</groupId>
<artifactId>org.eclipse.xtext</artifactId>
<version>2.5.1</version>
</dependency>
-->
<!-- TEST -->
<dependency>
<groupId>org.testng</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public abstract class Definition implements Serializable, DebugDumpable {
protected String help;
protected String documentation;
protected boolean deprecated = false;
protected boolean inherited = false; // whether an item is inherited from a supertype (experimental feature)

/**
* This means that the property container is not defined by fixed (compile-time) schema.
Expand Down Expand Up @@ -123,7 +124,15 @@ public void setDeprecated(boolean deprecated) {
this.deprecated = deprecated;
}

/**
public boolean isInherited() {
return inherited;
}

public void setInherited(boolean inherited) {
this.inherited = inherited;
}

/**
* Returns display name.
*
* Specifies the printable name of the object class or attribute. It must
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,6 @@
*/
package com.evolveum.midpoint.prism;

import java.io.File;
import java.io.IOException;

import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.dom.PrismDomProcessor;
import com.evolveum.midpoint.prism.path.ItemPath;
Expand All @@ -33,10 +23,18 @@
import com.evolveum.midpoint.prism.schema.SchemaDefinitionFactory;
import com.evolveum.midpoint.prism.schema.SchemaRegistry;
import com.evolveum.midpoint.prism.xml.PrismJaxbProcessor;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.IOException;

/**
* @author semancik
Expand Down Expand Up @@ -110,7 +108,7 @@ public void setPrismDomProcessor(PrismDomProcessor prismDomProcessor) {
this.prismDomProcessor = prismDomProcessor;
}

public SchemaDefinitionFactory getDefinitionFactory() {
public SchemaDefinitionFactory getDefinitionFactory() {
if (definitionFactory == null) {
definitionFactory = new SchemaDefinitionFactory();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

Expand All @@ -36,20 +35,16 @@

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.aspectj.weaver.bcel.TypeAnnotationAccessVar;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.evolveum.midpoint.prism.ComplexTypeDefinition;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Definition;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
Expand Down Expand Up @@ -297,13 +292,18 @@ private ComplexTypeDefinition createComplexTypeDefinition(XSComplexType complexT
ComplexTypeDefinition ctd = definitionFactory.createComplexTypeDefinition(complexType, prismContext, complexType.getAnnotation());

XSContentType content = complexType.getContentType();
XSContentType explicitContent = complexType.getExplicitContent();
if (content != null) {
XSParticle particle = content.asParticle();
if (particle != null) {
XSTerm term = particle.getTerm();

if (term.isModelGroup()) {
addPropertyDefinitionListFromGroup(term.asModelGroup(), ctd);
Boolean inherited = null;
if (explicitContent == null || content == explicitContent) {
inherited = false;
}
addPropertyDefinitionListFromGroup(term.asModelGroup(), ctd, inherited, explicitContent);
}
}

Expand Down Expand Up @@ -369,16 +369,20 @@ private void extractDocumentation(Definition definition, XSAnnotation annotation
* Creates ComplexTypeDefinition object from a XSModelGroup inside XSD complexType definition.
* This is a recursive method. It can create "anonymous" internal PropertyContainerDefinitions.
* The definitions will be added to the ComplexTypeDefinition provided as parameter.
* @param group XSD XSModelGroup
* @param ctd ComplexTypeDefinition that will hold the definitions
*/
private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeDefinition ctd) throws SchemaException {
* @param group XSD XSModelGroup
* @param ctd ComplexTypeDefinition that will hold the definitions
* @param inherited Are these properties inherited? (null means we don't know and we'll determine that from explicitContent)
* @param explicitContent Explicit (i.e. non-inherited) content of the type being parsed - filled-in only for subtypes!
*/
private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeDefinition ctd, Boolean inherited, XSContentType explicitContent) throws SchemaException {

XSParticle[] particles = group.getChildren();
for (XSParticle p : particles) {
boolean particleInherited =
inherited != null ? inherited : (p != explicitContent);
XSTerm pterm = p.getTerm();
if (pterm.isModelGroup()) {
addPropertyDefinitionListFromGroup(pterm.asModelGroup(), ctd);
addPropertyDefinitionListFromGroup(pterm.asModelGroup(), ctd, particleInherited, explicitContent);
}

// xs:element inside complex type
Expand All @@ -393,7 +397,7 @@ private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeD

if (isObjectReference(xsType, annotation)) {

processObjectReferenceDefinition(xsType, elementName, annotation, ctd, p);
processObjectReferenceDefinition(xsType, elementName, annotation, ctd, p, particleInherited);

} else if (isObjectDefinition(xsType)) {
// This is object reference. It also has its *Ref equivalent which will get parsed.
Expand All @@ -406,10 +410,12 @@ private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeD
XSAnnotation containerAnnotation = xsType.getAnnotation();
PrismContainerDefinition<?> containerDefinition = createPropertyContainerDefinition(xsType, p,
null, containerAnnotation, false);
containerDefinition.setInherited(particleInherited);
ctd.addDefinition(containerDefinition);
} else {
PrismPropertyDefinition propDef = createPropertyDefinition(xsType, elementName, DOMUtil.XSD_ANY,
ctd, annotation, p);
propDef.setInherited(particleInherited);
ctd.addDefinition(propDef);
}
}
Expand Down Expand Up @@ -441,6 +447,7 @@ private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeD
containerDefinition.setRuntimeSchema(true);
containerDefinition.setDynamic(true);
}
containerDefinition.setInherited(particleInherited);
ctd.addDefinition(containerDefinition);

} else {
Expand All @@ -449,15 +456,15 @@ private void addPropertyDefinitionListFromGroup(XSModelGroup group, ComplexTypeD
QName typeName = new QName(xsType.getTargetNamespace(), xsType.getName());

PrismPropertyDefinition propDef = createPropertyDefinition(xsType, elementName, typeName, ctd, annotation, p);

propDef.setInherited(particleInherited);
ctd.add(propDef);
}
}
}
}

private PrismReferenceDefinition processObjectReferenceDefinition(XSType xsType, QName elementName,
XSAnnotation annotation, ComplexTypeDefinition containingCtd, XSParticle elementParticle) throws SchemaException {
XSAnnotation annotation, ComplexTypeDefinition containingCtd, XSParticle elementParticle, boolean inherited) throws SchemaException {
QName typeName = new QName(xsType.getTargetNamespace(), xsType.getName());
QName primaryElementName = elementName;
Element objRefAnnotationElement = SchemaProcessorUtil.getAnnotationElement(annotation, A_OBJECT_REFERENCE);
Expand All @@ -472,6 +479,7 @@ private PrismReferenceDefinition processObjectReferenceDefinition(XSType xsType,
if (definition == null) {
SchemaDefinitionFactory definitionFactory = getDefinitionFactory();
definition = definitionFactory.createReferenceDefinition(primaryElementName, typeName, containingCtd, prismContext, annotation, elementParticle);
definition.setInherited(inherited);
if (containingCtd != null) {
containingCtd.add(definition);
}
Expand Down Expand Up @@ -567,7 +575,7 @@ private void createDefinitionsFromElements(XSSchemaSet set) throws SchemaExcepti
} else if (isObjectReference(xsElementDecl, xsType)) {

PrismReferenceDefinition refDef = processObjectReferenceDefinition(xsType, elementName, annotation,
null, null);
null, null, false);

schema.getDefinitions().add(refDef);

Expand Down
Loading

0 comments on commit 68b684f

Please sign in to comment.