Wednesday 23 October 2013

Adobe CQ5 Introduction

Adobe CQ5 is one of the java based web content management system. It combines with DAM, CRXDE Lite, inbox, website console, social collaboration, workflow, campaigns, Users & groups etc. It uses Sling framework, CRX content repository, felix (OSGi framework).

There are three important persons in Adobe CQ5 website creation
Developer – One who create the component
Author - One who Create, modify, delete the content using component and activate the page to publish
End User – One who visit the site

There are two instances in Adobe CQ5
1.      Author instance
2.      Publish instance

Author instance
            It provides the developer to create the new component, templates, workflow, etc. It allows the author to create, edit, delete and publish the content to publish instance

Publish instance
            End user visit the site from publish instance. Here you can’t create, edit or delete the content. Note: It runs with minimum files which is need for publish instance

Note:
Why author instance and publish instance?
         In real the world, sites contents are changed daily bases. So that, They separate the authoring and development in the author instance. Deploy site, load balancing, etc in publishing instance. They maintain the workflow while publishing pages from author to publish environment. 

Tuesday 22 October 2013

Android Activity

In Android, Activity is like state  of the application. Each activity has a layout. Activity has a lifecycle.
1. onCreate()
2. onStart()
3. onRestart()
4. onResume()
5. onPause()
6. onStop()
7. onDestroy()
ActivityA.java
package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.activitylifecycle.util.StatusTracker;
import com.example.activitylifecycle.util.Utils;



public class ActivityA extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_a);
       mActivityName = getString(R.string.activity_a);
       mStatusView = (TextView)findViewById(R.id.status_view_a);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_a);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
       mStatusTracker.clear();
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityA.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityB(View v) {
       Intent intent = new Intent(ActivityA.this, ActivityB.class);
       startActivity(intent);
   }

   public void startActivityC(View v) {
       Intent intent = new Intent(ActivityA.this, ActivityC.class);
       startActivity(intent);
   }
 
   public void finishActivityA(View v) {
       ActivityA.this.finish();
   }

}

ActivityB.java



package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.activitylifecycle.util.StatusTracker;
import com.example.activitylifecycle.util.Utils;




public class ActivityB extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_b);
       mActivityName = getString(R.string.activity_b_label);
       mStatusView = (TextView)findViewById(R.id.status_view_b);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_b);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityB.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityA(View v) {
       Intent intent = new Intent(ActivityB.this, ActivityA.class);
       startActivity(intent);
   }

   public void startActivityC(View v) {
       Intent intent = new Intent(ActivityB.this, ActivityC.class);
       startActivity(intent);
   }

   public void finishActivityB(View v) {
       ActivityB.this.finish();
   }
}

ActivityC.java



package com.example.android.lifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.android.lifecycle.util.StatusTracker;
import com.example.android.lifecycle.util.Utils;

public class ActivityC extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_c);
       mActivityName = getString(R.string.activity_c_label);
       mStatusView = (TextView)findViewById(R.id.status_view_c);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_c);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityC.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityA(View v) {
       Intent intent = new Intent(ActivityC.this, ActivityA.class);
       startActivity(intent);
   }

   public void startActivityB(View v) {
       Intent intent = new Intent(ActivityC.this, ActivityB.class);
       startActivity(intent);
   }

   public void finishActivityC(View v) {
       ActivityC.this.finish();
   }
}




DialogActivity.java
package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;

public class DialogActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.activity_dialog);
   }

       public void finishDialog(View v) {
       DialogActivity.this.finish();
   }
}



StatusTracker.java

package com.example.activitylifecycle.util;

import java.util.*;

public class StatusTracker {
 private Map<String, String> mStatusMap;
 private List<String> mMethodList;
 private static StatusTracker ourInstance = new StatusTracker();
 private static final String STATUS_SUFFIX = "ed";

 public static StatusTracker getInstance() {
   return ourInstance;
 }

 private StatusTracker() {
   mStatusMap = new LinkedHashMap<String, String>();
   mMethodList = new ArrayList<String>();
 }

 public List<String> getMethodList() {
   return mMethodList;
 }

 public void clear() {
   mMethodList.clear();
   mStatusMap.clear();
 }

   public void setStatus(String activityName, String status) {
   mMethodList.add(activityName + "." + status + "()");
   if (mStatusMap.containsKey(activityName)) mStatusMap.remove(activityName);
   mStatusMap.put(activityName, status);
 }

  public String getStatus(String activityName) {
   String status = mStatusMap.get(activityName);
   status = status.substring(2, status.length());

   // String manipulation to ensure the status value is spelled correctly.
   if (status.endsWith("e")) {
     status = status.substring(0, status.length() - 1);
   }
   if (status.endsWith("p")) {
     status = status + "p";
   }
   status = status + STATUS_SUFFIX;
   return status;
 }

 public Set<String> keySet() {
   return mStatusMap.keySet();
 }
}

Utils.java

package com.example.activitylifecycle.util;

import android.os.Handler;
import android.widget.TextView;

import java.util.List;

public class Utils {

 private static StatusTracker mStatusTracker = StatusTracker.getInstance();

  public static void printStatus(final TextView viewMethods, final TextView viewStatus) {
     Handler handler = new Handler();
     handler.postDelayed(new Runnable() {
       public void run() {
         StringBuilder sbMethods = new StringBuilder();
         List<String> listMethods = mStatusTracker.getMethodList();
         for (String method : listMethods) {
             sbMethods.insert(0, method + "\r\n");
         }
         if(viewMethods != null) {
             viewMethods.setText(sbMethods.toString());
         }

                   StringBuilder sbStatus = new StringBuilder();
         for (String key : mStatusTracker.keySet()) {
           sbStatus.insert(0,key + ": " + mStatusTracker.getStatus(key) + "\n");
         }
         if(viewStatus != null) {
             viewStatus.setText(sbStatus.toString());
         }
       }
     }, 750);
   }
}







Layout ActivityA
Other layout ActivityB and ActivityC also similar to ActivityA.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@color/dark_blue"
   android:padding="8dip"
   >

   <TextView android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/activity_a"
       android:gravity="center_horizontal"
       android:textSize="@dimen/font_large"
       android:textColor="@color/light_blue"
       android:paddingBottom="16dip"
       />

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       >
       <Button
           android:id="@+id/btn_start_b"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_b_label"
           android:onClick="startActivityB"
           />

       <Button
           android:id="@+id/btn_start_c"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_c_label"
           android:layout_toRightOf="@id/btn_start_b"
           android:onClick="startActivityC"
           />

       <Button
           android:id="@+id/btn_finish_a"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_finish_a_label"
           android:layout_toRightOf="@id/btn_start_c"
           android:onClick="finishActivityA"
           />

       <Button
           android:id="@+id/btn_start_dialog"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_dialog_label"
           android:layout_toRightOf="@id/btn_finish_a"
           android:onClick="startDialog"
           />

   </RelativeLayout>

   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="@dimen/font_medium"
       android:text="@string/lifecycle_method_list"
       android:textColor="@color/light_blue"
       />

   <ScrollView
        android:layout_width="match_parent"
        android:layout_height="160dp">
       <TextView
           android:id="@+id/status_view_a"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="@color/white"
           android:textColor="@color/black"
           android:padding="4dip"
           android:typeface="monospace"
           />
   </ScrollView>

   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="@dimen/font_medium"
       android:text="@string/activity_status"
       android:textColor="@color/light_blue"
       />

   <TextView
       android:id="@+id/status_view_all_a"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@color/white"
       android:textColor="@color/black"
       android:padding="4dip"
       android:typeface="monospace"
       />
</LinearLayout>

AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.activitylifecycle"
   android:versionCode="1"
   android:versionName="1.0" >

   <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="17" />

   <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".ActivityA"
           android:label="@string/app_name" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
        <activity android:name=".ActivityB" />

       <activity android:name=".ActivityC" />

       <activity android:name=".DialogActivity"
                 android:theme="@android:style/Theme.Dialog">
       </activity>
       
   </application>

</manifest>