/** * Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET * (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije * informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE * COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp., * INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM * ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC)) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.societies.android.platform.privacytrust.policymanagement; import java.util.List; import org.societies.android.api.internal.privacytrust.IPrivacyPolicyManager; import org.societies.android.api.privacytrust.privacy.model.PrivacyException; import org.societies.android.api.privacytrust.privacy.util.privacypolicy.PrivacyPolicyUtils; import org.societies.android.api.privacytrust.privacy.util.privacypolicy.RequestItemUtils; import org.societies.android.api.privacytrust.privacy.util.privacypolicy.ResourceUtils; import org.societies.android.platform.privacytrust.R; import org.societies.android.privacytrust.policymanagement.service.PrivacyPolicyManagerLocalService; import org.societies.android.privacytrust.policymanagement.service.PrivacyPolicyManagerLocalService.LocalBinder; import org.societies.api.internal.schema.privacytrust.privacyprotection.privacypolicymanagement.MethodType; import org.societies.api.schema.identity.DataIdentifierScheme; import org.societies.api.schema.identity.RequestorCisBean; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestItem; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestPolicy; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Resource; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.PrivacyPolicyBehaviourConstants; import org.societies.android.platform.comms.helper.ClientCommunicationMgr; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; /** * @author Olivier Maridat (Trialog) * @date 28 nov. 2011 */ public class PrivacyPolicyManagerActivity extends Activity implements OnClickListener { private final static String TAG = PrivacyPolicyManagerActivity.class.getSimpleName(); private TextView txtLocation; private TextView txtConnectivity; private boolean ipBoundToService = false; private IPrivacyPolicyManager privacyPolicyManagerService = null; private ClientCommunicationMgr clientCommManager; private RequestPolicy retrievedPrivacyPolicy; private RequestPolicy defaultPrivacyPolicy; //Enter local user credentials and domain name private static final String USER_NAME = "university"; private static final String USER_PASS = "university"; private static final String XMPP_DOMAIN = "societies.local"; /* ************** * Business * ************** */ // Sender /** * Call an in-process service. Service consumer simply calls service API and can use * return value * * @param view */ public void onLaunchTest(View view) { txtLocation.setText(R.string.txt_nothing); // If this service is available if (ipBoundToService) { try { txtLocation.setText("Waiting"); RequestorCisBean owner = new RequestorCisBean(); owner.setRequestorId("university.societies.local"); owner.setCisRequestorId("cis-c9140e94-bdc5-4644-b2ad-2bc10198d89c.societies.local"); if (R.id.btnLaunchTest1 == view.getId()) { privacyPolicyManagerService.getPrivacyPolicy(this.getPackageName(), owner); } if (R.id.btnLaunchTest1bis == view.getId()) { owner.setRequestorId("emma.societies.local"); owner.setCisRequestorId("cis-a1fcced7-fae7-4253-a44f-27a281811ca1.societies.local"); privacyPolicyManagerService.getPrivacyPolicy(this.getPackageName(), owner); } else if (R.id.btnLaunchTest2 == view.getId()) { RequestPolicy newPrivacyPolicy = PrivacyPolicyUtils.inferCisPrivacyPolicy(PrivacyPolicyBehaviourConstants.MEMBERS_ONLY, null); newPrivacyPolicy.setRequestor(owner); privacyPolicyManagerService.updatePrivacyPolicy(this.getPackageName(), newPrivacyPolicy); } else if (R.id.btnLaunchTest4 == view.getId()) { privacyPolicyManagerService.deletePrivacyPolicy(this.getPackageName(), owner); } } catch (PrivacyException e) { Log.e(TAG, "Error during the privacy policy retrieving", e); txtLocation.setText(R.string.txt_nothing); Toast.makeText(this, "Error during the privacy policy retrieving: "+e.getMessage(), Toast.LENGTH_SHORT); } catch (Exception e) { Log.e(TAG, "Fatal error during the privacy policy retrieving", e); txtLocation.setText(R.string.txt_nothing); Toast.makeText(this, "Fatal error during the privacy policy retrieving: "+e.getMessage(), Toast.LENGTH_SHORT); } } else { txtLocation.setText(R.string.txt_nothing); Toast.makeText(this, "No service connected.", Toast.LENGTH_SHORT); } } // Receiver private class bReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, intent.getAction()); boolean ack = intent.getBooleanExtra(IPrivacyPolicyManager.INTENT_RETURN_STATUS_KEY, false); StringBuffer sb = new StringBuffer(); sb.append(intent.getAction()+": "+(ack ? "success" : "failure")); if (ack && (intent.getAction().equals(MethodType.GET_PRIVACY_POLICY.name()))) { retrievedPrivacyPolicy = (RequestPolicy) intent.getSerializableExtra(IPrivacyPolicyManager.INTENT_RETURN_VALUE_KEY); sb.append("Privacy policy retrieved: "+(null != retrievedPrivacyPolicy)); if (null != retrievedPrivacyPolicy) { sb.append(PrivacyPolicyUtils.toXmlString(retrievedPrivacyPolicy)); } } txtLocation.setText(sb.toString()); } } /* ************** * Button Listeners * ************** */ public void onClick(View v) { if (R.id.btnLaunchTest1 == v.getId() || R.id.btnLaunchTest1bis == v.getId() || R.id.btnLaunchTest2 == v.getId() || R.id.btnLaunchTest4 == v.getId()) { onLaunchTest(v); } else if (R.id.btnReset == v.getId()) { onButtonResetClick(v); } else { Toast.makeText(this, "What button did you clicked on?", Toast.LENGTH_SHORT); } }; /** * Utilities button to reset all values of this activity * @param view */ public void onButtonResetClick(View view) { txtLocation.setText(R.string.txt_nothing); } /* ************** * Activity Lifecycle * ************** */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.privacypolicy); // -- Create a link with editable area txtLocation = (TextView) findViewById(R.id.txtLocation); // -- Create a link with buttons ((Button) findViewById(R.id.btnLaunchTest1)).setOnClickListener(this); ((Button) findViewById(R.id.btnLaunchTest1bis)).setOnClickListener(this); ((Button) findViewById(R.id.btnLaunchTest2)).setOnClickListener(this); ((Button) findViewById(R.id.btnLaunchTest4)).setOnClickListener(this); ((Button) findViewById(R.id.btnReset)).setOnClickListener(this); clientCommManager = new ClientCommunicationMgr(this.getApplicationContext(), true); // txtConnectivity.setText("Is connected? "+(clientCommManager.isConnected() ? "yes" : "no")); // -- Create a link with services Intent ipIntent = new Intent(getApplicationContext(), PrivacyPolicyManagerLocalService.class); getApplicationContext().bindService(ipIntent, inProcessServiceConnection, Context.BIND_AUTO_CREATE); //REGISTER BROADCAST IntentFilter intentFilter = new IntentFilter() ; intentFilter.addAction(IPrivacyPolicyManager.INTENT_DEFAULT_ACTION); intentFilter.addAction(MethodType.GET_PRIVACY_POLICY.name()); intentFilter.addAction(MethodType.UPDATE_PRIVACY_POLICY.name()); intentFilter.addAction(MethodType.DELETE_PRIVACY_POLICY.name()); intentFilter.addAction(MethodType.INFER_PRIVACY_POLICY.name()); this.getApplicationContext().registerReceiver(new bReceiver(), intentFilter); // Mock data try { defaultPrivacyPolicy = PrivacyPolicyUtils.inferCisPrivacyPolicy(PrivacyPolicyBehaviourConstants.MEMBERS_ONLY, null); } catch(PrivacyException e) { Log.e(TAG, "Cannot generate default privacy policy: "+e.getMessage()); } } protected void onStop() { super.onStop(); // -- Unlink with services if (ipBoundToService) { getApplicationContext().unbindService(inProcessServiceConnection); } // -- Logout // clientCommManager.logout(); } private ServiceConnection inProcessServiceConnection = new ServiceConnection() { public void onServiceDisconnected(ComponentName name) { ipBoundToService = false; } public void onServiceConnected(ComponentName name, IBinder service) { Log.d(TAG, "Connect to service: IPrivacyPolicyManager"); LocalBinder binder = (LocalBinder) service; privacyPolicyManagerService = (IPrivacyPolicyManager) binder.getService(); ipBoundToService = true; } }; }