/*******************************************************************************
* Copyright (c) 2015 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.qt.core.qmltypes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.qt.core.qmljs.IQmlObjectDefinition;
import org.eclipse.cdt.qt.core.qmljs.IQmlObjectMember;
import org.eclipse.cdt.qt.core.qmljs.IQmlPropertyBinding;
public class QMLComponentInfo {
static final String IDENTIFIER = "Component"; //$NON-NLS-1$
static final String PROPERTY_NAME = "name"; //$NON-NLS-1$
static final String PROPERTY_PROTOTYPE = "prototype"; //$NON-NLS-1$
static final String PROPERTY_DEF_PROPERTY = "defaultProperty"; //$NON-NLS-1$
static final String PROPERTY_ATTACHED_TYPE = "attachedType"; //$NON-NLS-1$
static final String PROPERTY_EXPORTS = "exports"; //$NON-NLS-1$
static final String PROPERTY_EXPORT_REVISIONS = "exportMetaObjectRevisions"; //$NON-NLS-1$
private String name;
private String prototype;
private String defaultProperty;
private String attachedType;
private Integer[] exportMetaObjectRevisions;
private List<QMLExportInfo> exportList = new ArrayList<>();
private List<QMLPropertyInfo> propertyList = new ArrayList<>();
private List<QMLMethodInfo> methodList = new ArrayList<>();
private List<QMLSignalInfo> signalList = new ArrayList<>();
private List<QMLEnumInfo> enumList = new ArrayList<>();
protected QMLComponentInfo(QMLModelBuilder builder, IQmlObjectDefinition obj) {
builder.ensureIdentifier(obj.getIdentifier(), IDENTIFIER);
for (IQmlObjectMember member : obj.getBody().getMembers()) {
if (member instanceof IQmlPropertyBinding) {
IQmlPropertyBinding prop = (IQmlPropertyBinding) member;
switch (prop.getIdentifier().getName()) {
case PROPERTY_NAME:
this.name = builder.getStringBinding(prop);
break;
case PROPERTY_PROTOTYPE:
this.prototype = builder.getStringBinding(prop);
break;
case PROPERTY_DEF_PROPERTY:
this.defaultProperty = builder.getStringBinding(prop);
break;
case PROPERTY_ATTACHED_TYPE:
this.attachedType = builder.getStringBinding(prop);
break;
case PROPERTY_EXPORTS:
String[] exports = builder.getStringArrayBinding(prop);
for (String exp : exports) {
this.exportList.add(new QMLExportInfo(builder, exp));
}
break;
case PROPERTY_EXPORT_REVISIONS:
this.exportMetaObjectRevisions = builder.getIntegerArrayBinding(prop);
break;
default:
}
} else if (member instanceof IQmlObjectDefinition) {
IQmlObjectDefinition object = (IQmlObjectDefinition) member;
switch (object.getIdentifier().getName()) {
case QMLPropertyInfo.IDENTIFIER:
this.propertyList.add(new QMLPropertyInfo(builder, object));
break;
case QMLMethodInfo.IDENTIFIER:
this.methodList.add(new QMLMethodInfo(builder, object));
break;
case QMLSignalInfo.IDENTIFIER:
this.signalList.add(new QMLSignalInfo(builder, object));
break;
case QMLEnumInfo.IDENTIFIER:
this.enumList.add(new QMLEnumInfo(builder, object));
break;
default:
}
} else {
builder.unexpectedNode(member);
}
}
exportList = Collections.unmodifiableList(exportList);
propertyList = Collections.unmodifiableList(propertyList);
methodList = Collections.unmodifiableList(methodList);
signalList = Collections.unmodifiableList(signalList);
enumList = Collections.unmodifiableList(enumList);
}
public String getName() {
return name;
}
public String getPrototype() {
return prototype;
}
public String getDefaultProperty() {
return defaultProperty;
}
public String getAttachedType() {
return attachedType;
}
public List<QMLExportInfo> getExports() {
return exportList;
}
public Integer[] getExportMetaObjectRevisions() {
return Arrays.copyOf(exportMetaObjectRevisions, exportMetaObjectRevisions.length);
}
public List<QMLPropertyInfo> getProperties() {
return propertyList;
}
public List<QMLMethodInfo> getMethods() {
return methodList;
}
public List<QMLSignalInfo> getSignals() {
return signalList;
}
public List<QMLEnumInfo> getEnums() {
return enumList;
}
}