All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.osgi.storage.PermissionData Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * Copyright (c) 2003, 2016 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.osgi.storage;

import java.io.*;
import java.util.*;

/**
 * Permission Storage interface for managing a persistent storage of
 * bundle permissions.
 *
 * 

This class is used to provide methods to manage * persistent storage of bundle permissions. */ public class PermissionData { private static final int PERMDATA_VERSION = 1; private final Map locations = new HashMap<>(); private String[] defaultInfos; private String[] condPermInfos; private boolean dirty; /** * Returns the locations that have permission data assigned to them, * that is, locations for which permission data * exists in persistent storage. * * @return The locations that have permission data in * persistent storage, or null if there is no permission data * in persistent storage. */ public String[] getLocations() { synchronized (locations) { String[] result = new String[locations.size()]; int i = 0; for (Iterator iLocs = locations.keySet().iterator(); iLocs.hasNext(); i++) result[i] = iLocs.next(); return result; } } /** * Gets the permission data assigned to the specified * location. * * @param location The location whose permission data is to * be returned. * The location can be null for the default permission data. * * @return The permission data assigned to the specified * location, or null if that location has not been assigned any * permission data. */ public String[] getPermissionData(String location) { if (location == null) return defaultInfos; synchronized (locations) { if (locations.size() == 0) return null; return locations.get(location); } } /** * Assigns the specified permission data to the specified * location. * * @param location The location that will be assigned the * permissions. * The location can be null for the default permission data. * @param data The permission data to be assigned, or null * if the specified location is to be removed from persistent storaqe. */ public void setPermissionData(String location, String[] data) { if (location == null) { defaultInfos = data; return; } synchronized (locations) { if (data == null) locations.remove(location); else locations.put(location, data); } setDirty(true); } /** * Persists the array of encoded ConditionalPermissionInfo strings * @param infos an array of encoded ConditionalPermissionInfo strings */ public void saveConditionalPermissionInfos(String[] infos) { condPermInfos = infos; setDirty(true); } /** * Returns the persistent array of encoded ConditionalPermissionInfo strings * @return an array of encoded ConditionalPermissionInfo strings or null * if none exist in persistent storage. */ public String[] getConditionalPermissionInfos() { return condPermInfos; } boolean isDirty() { return dirty; } private void setDirty(boolean dirty) { this.dirty = dirty; } void readPermissionData(DataInputStream in) throws IOException { int version = in.readInt(); int dataSize = in.readInt(); byte[] bytes = new byte[dataSize]; in.readFully(bytes); if (PERMDATA_VERSION == version) { DataInputStream temp = new DataInputStream(new ByteArrayInputStream(bytes)); try { // read the default permissions first int numPerms = temp.readInt(); if (numPerms > 0) { String[] perms = new String[numPerms]; for (int i = 0; i < numPerms; i++) perms[i] = temp.readUTF(); setPermissionData(null, perms); } int numLocs = temp.readInt(); if (numLocs > 0) { for (int i = 0; i < numLocs; i++) { String loc = temp.readUTF(); numPerms = temp.readInt(); String[] perms = new String[numPerms]; for (int j = 0; j < numPerms; j++) perms[j] = temp.readUTF(); setPermissionData(loc, perms); } } int numCondPerms = temp.readInt(); if (numCondPerms > 0) { String[] condPerms = new String[numCondPerms]; for (int i = 0; i < numCondPerms; i++) { condPerms[i] = temp.readUTF(); } saveConditionalPermissionInfos(condPerms); } } finally { setDirty(false); temp.close(); } } } void savePermissionData(DataOutputStream out) throws IOException { out.writeInt(PERMDATA_VERSION); // create a temporary in memory stream so we can figure out the length ByteArrayOutputStream tempBytes = new ByteArrayOutputStream(); DataOutputStream temp = new DataOutputStream(tempBytes); // always write the default permissions first String[] defaultPerms = getPermissionData(null); temp.writeInt(defaultPerms == null ? 0 : defaultPerms.length); if (defaultPerms != null) for (String defaultPerm : defaultPerms) { temp.writeUTF(defaultPerm); } String[] locs = getLocations(); temp.writeInt(locs == null ? 0 : locs.length); if (locs != null) for (String loc : locs) { temp.writeUTF(loc); String[] perms = getPermissionData(loc); temp.writeInt(perms == null ? 0 : perms.length); if (perms != null) { for (String perm : perms) { temp.writeUTF(perm); } } } String[] condPerms = getConditionalPermissionInfos(); temp.writeInt(condPerms == null ? 0 : condPerms.length); if (condPerms != null) for (String condPerm : condPerms) { temp.writeUTF(condPerm); } temp.close(); out.writeInt(tempBytes.size()); out.write(tempBytes.toByteArray()); setDirty(false); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy