/* * Copyright (C) 2012 The Android Open Source Project * * 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.motorola.studio.android.model.manifest.dom; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; /** * Class that represents a <provider> node on AndroidManifest.xml file */ public class ProviderNode extends AbstractBuildingBlockNode { static { defaultProperties.add(PROP_AUTHORITIES); defaultProperties.add(PROP_GRANTURIPERMISSIONS); defaultProperties.add(PROP_INITORDER); defaultProperties.add(PROP_MULTIPROCESS); defaultProperties.add(PROP_READPERMISSION); defaultProperties.add(PROP_SYNCABLE); defaultProperties.add(PROP_WRITEPERMISSION); } /** * The authorities property */ private List<String> propAuthorities = null; /** * The grantUriPermissions property */ private Boolean propGrantUriPermissions = null; /** * The initOrder property */ private Integer propInitOrder = null; /** * The multiprocess property */ private Boolean propMultiprocess = null; /** * The readPermission property */ private String propReadPermission = null; /** * The syncable property */ private Boolean propSyncable = null; /** * The writePermission property */ private String propWritePermission = null; /** * Default constructor * * @param name The name property. It must not be null. * @param initialAuthority The first authority to be added to the provider. * It must not be null. */ public ProviderNode(String name, String initialAuthority) { super(name); Assert.isLegal(initialAuthority != null); propAuthorities = new LinkedList<String>(); propAuthorities.add(initialAuthority); } /* (non-Javadoc) * @see com.motorola.studio.android.model.manifest.dom.AndroidManifestNode#canContains(com.motorola.studio.android.model.manifest.dom.AndroidManifestNode.NodeType) */ @Override protected boolean canContains(NodeType nodeType) { return (nodeType == NodeType.GrantUriPermission) || (nodeType == NodeType.MetaData) || (nodeType == NodeType.Comment); } /* (non-Javadoc) * @see com.motorola.studio.android.model.manifest.dom.AbstractIconLabelNameNode#addAdditionalProperties() */ @Override protected void addAdditionalProperties() { super.addAdditionalProperties(); properties.put(PROP_AUTHORITIES, getAuthoritiesList()); if (propGrantUriPermissions != null) { properties.put(PROP_GRANTURIPERMISSIONS, propGrantUriPermissions.toString()); } if (propInitOrder != null) { properties.put(PROP_INITORDER, propInitOrder.toString()); } if (propMultiprocess != null) { properties.put(PROP_MULTIPROCESS, propMultiprocess.toString()); } if (propReadPermission != null) { properties.put(PROP_READPERMISSION, propReadPermission); } if (propSyncable != null) { properties.put(PROP_SYNCABLE, propSyncable.toString()); } if (propWritePermission != null) { properties.put(PROP_WRITEPERMISSION, propWritePermission); } } /* (non-Javadoc) * @see com.motorola.studio.android.model.manifest.dom.AndroidManifestNode#getNodeType() */ @Override public NodeType getNodeType() { return NodeType.Provider; } /* (non-Javadoc) * @see com.motorola.studio.android.model.manifest.dom.AndroidManifestNode#isNodeValid() */ @Override protected boolean isNodeValid() { return super.isNodeValid() && (getAuthoritiesList().trim().length() > 0); } /** * Gets the Content Provider authorities as a list separated by semicolons, ready to be * used on manifest file * * @return the Content Provider authorities as a list separated by semicolons */ private String getAuthoritiesList() { String authorities = ""; if ((propAuthorities != null) && !propAuthorities.isEmpty()) { for (int i = 0; i < (propAuthorities.size() - 1); i++) { authorities += propAuthorities.get(i) + ";"; } authorities += propAuthorities.get(propAuthorities.size() - 1); } return authorities; } /** * Adds an authority to the Content Provider * * @param authority The authority name * * @return true if the authority has been added (if it does not exist) or false otherwise */ public boolean addAuthority(String authority) { Assert.isLegal(authority != null); boolean added = false; String auth = authority.trim(); if (!propAuthorities.contains(auth)) { propAuthorities.add(auth); added = true; } return added; } /** * Retrieves an array containing all authorities * * @return an array containing all authorities */ public String[] getAuthorities() { String[] authorities = new String[propAuthorities.size()]; authorities = propAuthorities.toArray(authorities); return authorities; } /** * Removes an authority from the authority list. If the given authority is the last one, * it will not be removed. * * @param authority The authority to be removed * * @return true if the authority has been removed and false otherwise */ public boolean removeAuthority(String authority) { Assert.isLegal(authority != null); boolean removed = false; String auth = authority.trim(); if ((propAuthorities.size() > 1) && propAuthorities.contains(auth)) { propAuthorities.remove(auth); removed = true; } return removed; } /** * Gets the grantUriPermissions property value * * @return the grantUriPermissions property value */ public Boolean getGrantUriPermissions() { return propGrantUriPermissions; } /** * Sets the grantUriPermissions property value. Set it to null to remove it. * * @param grantUriPermissions the grantUriPermissions property value */ public void setGrantUriPermissions(Boolean grantUriPermissions) { this.propGrantUriPermissions = grantUriPermissions; } /** * Gets the initOrder property value * * @return the initOrder property value */ public Integer getInitOrder() { return propInitOrder; } /** * Sets the initOrder property value. Set it to null to remove it. * * @param initOrder the initOrder property value */ public void setInitOrder(Integer initOrder) { this.propInitOrder = initOrder; } /** * Gets the multiprocess property value * * @return the multiprocess property value */ public Boolean getMultiprocess() { return propMultiprocess; } /** * Sets the multiprocess property value. Set it to null to remove it. * * @param multiprocess the multiprocess property value */ public void setMultiprocess(Boolean multiprocess) { this.propMultiprocess = multiprocess; } /** * Gets the readPermission property value * * @return the readPermission property value */ public String getReadPermission() { return propReadPermission; } /** * Sets the readPermission property value. Set it to null to remove it. * * @param readPermission the readPermission property value */ public void setReadPermission(String readPermission) { this.propReadPermission = readPermission; } /** * Gets the syncable property value * * @return the syncable property value */ public Boolean getSyncable() { return propSyncable; } /** * Sets the syncable property value. Set it to null to remove it. * * @param syncable the syncable property value */ public void setSyncable(Boolean syncable) { this.propSyncable = syncable; } /** * Gets the writePermission property value * * @return the writePermission property value */ public String getWritePermission() { return propWritePermission; } /** * Sets the writePermission property value. Set it to null to remove it. * * @param writePermission the writePermission property value */ public void setWritePermission(String writePermission) { this.propWritePermission = writePermission; } /** * Adds a Metadata Node to the Provider Node * * @param metadata The Metadata Node */ public void addMetadataNode(MetadataNode metadata) { if (metadata != null) { if (!children.contains(metadata)) { children.add(metadata); } } } /** * Retrieves all Metadata Nodes from the Provider Node * * @return all Metadata Nodes from the Provider Node */ public List<MetadataNode> getMetadataNodes() { List<MetadataNode> metadatas = new LinkedList<MetadataNode>(); for (AndroidManifestNode node : getAllChildrenFromType(NodeType.MetaData)) { metadatas.add((MetadataNode) node); } return metadatas; } /** * Removes a Metadata Node from the Provider Node * * @param metadata the Metadata Node to be removed */ public void removeMetadataNode(MetadataNode metadata) { if (metadata != null) { children.remove(metadata); } } /** * Adds a Grant Uri Permission Node to the Provider Node * * @param grantUriPermission The Grant Uri Permission Node */ public void addGrantUriPermissionNode(GrantUriPermissionNode grantUriPermission) { if (grantUriPermission != null) { if (!children.contains(grantUriPermission)) { children.add(grantUriPermission); } } } /** * Retrieves all Grant Uri Permission Nodes from the Provider Node * * @return all Grant Uri Permission Nodes from the Provider Node */ public List<GrantUriPermissionNode> getGrantUriPermissionsNodes() { List<GrantUriPermissionNode> grantUriPermissions = new LinkedList<GrantUriPermissionNode>(); for (AndroidManifestNode node : getAllChildrenFromType(NodeType.GrantUriPermission)) { grantUriPermissions.add((GrantUriPermissionNode) node); } return grantUriPermissions; } /** * Removes a Grant Uri Permission Node from the Provider Node * * @param grantUriPermission the Grant Uri Permission Node to be removed */ public void removeGrantUriPermissionNode(GrantUriPermissionNode grantUriPermission) { if (grantUriPermission != null) { children.remove(grantUriPermission); } } /* (non-Javadoc) * @see com.motorola.studio.android.model.manifest.dom.AndroidManifestNode#getSpecificNodeErrors() */ @Override protected List<IStatus> getSpecificNodeProblems() { return null; } /** * Adds an Intent Filter Node to the Provider Node * * @param intentFilter The Intent Filter Node */ public void addIntentFilterNode(IntentFilterNode intentFilter) { if (intentFilter != null) { if (!children.contains(intentFilter)) { children.add(intentFilter); } } } }