155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/*
255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Eclipse Public License, Version 1.0 (the "License");
555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License.
655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at
755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *      http://www.eclipse.org/org/documents/epl-v10.php
955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and
1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License.
1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1769425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetpackage com.android.ide.eclipse.adt.internal.editors.manifest.descriptors;
1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
1969425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.descriptors.AttributeDescriptor;
2069425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
2169425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.manifest.model.UiManifestElementNode;
2269425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/**
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * {@link ManifestElementDescriptor} describes an XML element node, with its
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * element name, its possible attributes, its possible child elements but also
2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * its display name and tooltip.
283dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll *
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * This {@link ElementDescriptor} is specialized to create {@link UiManifestElementNode} UI nodes.
3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class ManifestElementDescriptor extends ElementDescriptor {
3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * Constructs a new {@link ManifestElementDescriptor}.
353dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     *
363dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param xml_name The XML element node name. Case sensitive.
373dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param ui_name The XML element name for the user interface, typically capitalized.
383dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param tooltip An optional tooltip. Can be null or empty.
393dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param sdk_url An optional SKD URL. Can be null or empty.
403dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param attributes The list of allowed attributes. Can be null or empty.
413dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param children The list of allowed children. Can be null or empty.
423dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * @param mandatory Whether this node must always exist (even for empty models).
433dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     */
443dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll    public ManifestElementDescriptor(String xml_name,
453dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String ui_name,
463dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String tooltip,
473dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String sdk_url,
483dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            AttributeDescriptor[] attributes,
493dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            ElementDescriptor[] children,
503dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            Mandatory mandatory) {
513dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll        super(xml_name, ui_name, tooltip, sdk_url, attributes, children, mandatory);
523dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll    }
533dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll
543dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll    /**
553dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     * Constructs a new {@link ManifestElementDescriptor}.
563dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     *
5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param xml_name The XML element node name. Case sensitive.
5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param ui_name The XML element name for the user interface, typically capitalized.
5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param tooltip An optional tooltip. Can be null or empty.
6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param sdk_url An optional SKD URL. Can be null or empty.
6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param attributes The list of allowed attributes. Can be null or empty.
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param children The list of allowed children. Can be null or empty.
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param mandatory Whether this node must always exist (even for empty models).
6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
653dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll    public ManifestElementDescriptor(String xml_name,
663dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String ui_name,
673dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String tooltip,
683dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String sdk_url,
6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            AttributeDescriptor[] attributes,
7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            ElementDescriptor[] children,
7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            boolean mandatory) {
7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        super(xml_name, ui_name, tooltip, sdk_url, attributes, children, mandatory);
7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * Constructs a new {@link ManifestElementDescriptor}.
773dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     *
7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param xml_name The XML element node name. Case sensitive.
7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param ui_name The XML element name for the user interface, typically capitalized.
8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param tooltip An optional tooltip. Can be null or empty.
8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param sdk_url An optional SKD URL. Can be null or empty.
8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param attributes The list of allowed attributes. Can be null or empty.
8355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param children The list of allowed children. Can be null or empty.
8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
853dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll    public ManifestElementDescriptor(String xml_name,
863dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String ui_name,
873dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String tooltip,
883dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll            String sdk_url,
8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            AttributeDescriptor[] attributes,
9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            ElementDescriptor[] children) {
9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        super(xml_name, ui_name, tooltip, sdk_url, attributes, children, false);
9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * This is a shortcut for
9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * ManifestElementDescriptor(xml_name, xml_name.capitalize(), null, null, null, children).
9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * This constructor is mostly used for unit tests.
983dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     *
9955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param xml_name The XML element node name. Case sensitive.
10055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
10155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public ManifestElementDescriptor(String xml_name, ElementDescriptor[] children) {
10255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        super(xml_name, children);
10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * This is a shortcut for
10755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * ManifestElementDescriptor(xml_name, xml_name.capitalize(), null, null, null, null).
10855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * This constructor is mostly used for unit tests.
1093dfd8112f7137821ef9191bfdd82a7f30ae52dc6Raphael Moll     *
11055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @param xml_name The XML element node name. Case sensitive.
11155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
11255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public ManifestElementDescriptor(String xml_name) {
11355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        super(xml_name, null);
11455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
11555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
11655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
11755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @return A new {@link UiElementNode} linked to this descriptor.
11855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
11955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    @Override
12055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public UiElementNode createUiNode() {
12155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return new UiManifestElementNode(this);
12255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
12355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
124