Android Open Source - classy_apps Classy Fy Startup






From Project

Back to project page classy_apps.

License

The source code is released under:

GNU General Public License

If you think the Android project classy_apps listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
    Copyright (C) 2014  www.cybersearch2.com.au
//ww w .ja  v a2  s .  c  o m
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/> */
package au.com.cybersearch2.classyfy;

import javax.inject.Inject;
import javax.persistence.PersistenceException;

import android.content.ContentResolver;
import android.content.Context;
import android.util.Log;
import au.com.cybersearch2.classyapp.ContextModule;
import au.com.cybersearch2.classydb.DatabaseAdmin;
import au.com.cybersearch2.classynode.EntityByNodeIdGenerator;
import au.com.cybersearch2.classyfy.data.RecordCategory;
import au.com.cybersearch2.classyfy.data.RecordFolder;
import au.com.cybersearch2.classyfy.provider.ClassyFySearchEngine;
import au.com.cybersearch2.classyinject.DI;
import au.com.cybersearch2.classyjpa.persist.PersistenceAdmin;
import au.com.cybersearch2.classyjpa.persist.Persistence;
import au.com.cybersearch2.classyjpa.persist.PersistenceFactory;
import au.com.cybersearch2.classytask.Executable;
import au.com.cybersearch2.classytask.ThreadHelper;
import au.com.cybersearch2.classytask.WorkStatus;
import au.com.cybersearch2.classytask.WorkTracker;

import com.j256.ormlite.dao.DaoManager;

/**
 * ClassyFyStartup
 * Creates application Object Graph for Dependency Injection and
 * Initializes persistence. 
 * @author Andrew Bowley
 * 23/07/2014
 */
public class ClassyFyStartup
{
   
    public static final String TAG = "ClassyFyStartup";
    /** Application  Dependency Injection configuration */
    protected ClassyFyApplicationModule classyFyApplicationModule;
    /** Tracks progress of start up and signals completion */
    protected WorkTracker applicationSetup;
    /** Persistence system configured by persistence.xml contains one or more Persistence Units */
    @Inject PersistenceFactory persistenceFactory;
    /** Allows thread priority to be adjusted for background priority */
    @Inject ThreadHelper threadHelper;

    /**
     * Construct ClassyFyStartup object
     */
    public ClassyFyStartup()
    {
        applicationSetup = new WorkTracker();
    }

    /**
     * Start application
     * @param context Android Context
     */
    public void start(final Context context)
    {
      // Clear out ORMLite internal caches.
        DaoManager.clearCache();
        // Create application Object Graph for Dependency Injection
        classyFyApplicationModule = new ClassyFyApplicationModule();
        DI dependencyInjection = new DI(classyFyApplicationModule, new ContextModule(context));
        dependencyInjection.validate();
        // Inject persistenceFactory and threadHelper
        DI.inject(this);
        // Set up thread to initialize persistence
        Runnable setupInBackground = new Runnable()
        {
            @Override
            public void run() 
            {
                threadHelper.setBackgroundPriority();
                applicationSetup.setStatus(WorkStatus.RUNNING);
                WorkStatus status = WorkStatus.FAILED;
                try
                {
                  // Persistence system configured by persistence.xml contains one or more Persistence Unitst
                    persistenceFactory.initializeAllDatabases();
                    // Set up named queries to find Category and Folder by Node ID
                    Persistence persistence = persistenceFactory.getPersistenceUnit(ClassyFyApplication.PU_NAME);
                    PersistenceAdmin persistenceAdmin = persistence.getPersistenceAdmin();
                    EntityByNodeIdGenerator entityByNodeIdGenerator = new EntityByNodeIdGenerator();
                    persistenceAdmin.addNamedQuery(RecordCategory.class, ClassyFyApplication.CATEGORY_BY_NODE_ID, entityByNodeIdGenerator);
                    persistenceAdmin.addNamedQuery(RecordFolder.class, ClassyFyApplication.FOLDER_BY_NODE_ID, entityByNodeIdGenerator);
                    status = WorkStatus.FINISHED;
                }
                catch (PersistenceException e)
                {   // All SQLExceptions are rethrown as PersistenceExceptions
                    Log.e(TAG, "Database initialisation failed", e);
                }
                applicationSetup.setStatus(status);
                synchronized(applicationSetup)
                {
                    applicationSetup.notifyAll();
                }
                if (status == WorkStatus.FINISHED)
                {   // Call ClassyFyProvider to start SearchEngine
                    ContentResolver contentResolver  = context.getContentResolver();
                    contentResolver.getType(ClassyFySearchEngine.CONTENT_URI);
                }
            }
        };
        Thread thread = new Thread(setupInBackground);
        thread.setName("ClassyFy_start");
        thread.start();
    }

    /**
     * Returns read-only application WorkTracker
     * @return Executable
     */
    Executable getApplicationSetup()
    {
        return applicationSetup;
    }

    /**
     * Wait for start up to complete
     * @return WorkStatus indicating final status of finished or failed
     */
    public WorkStatus waitForApplicationSetup()
    {
        if ((applicationSetup.getStatus() != WorkStatus.FINISHED) &&
             (applicationSetup.getStatus() != WorkStatus.FAILED))
            synchronized(applicationSetup)
            {
                try
                {
                    applicationSetup.wait();
                }
                catch (InterruptedException e)
                {
                }
            }
        return applicationSetup.getStatus();
    }
    
}




Java Source Code List

au.com.cybersearch2.classyfy.ClassyFyApplicationModule.java
au.com.cybersearch2.classyfy.ClassyFyApplication.java
au.com.cybersearch2.classyfy.ClassyFyEnvironmentModule.java
au.com.cybersearch2.classyfy.ClassyFyResourceEnvironment.java
au.com.cybersearch2.classyfy.ClassyFyStartup.java
au.com.cybersearch2.classyfy.ClassyFyThreadHelper.java
au.com.cybersearch2.classyfy.MainActivityTest.java
au.com.cybersearch2.classyfy.MainActivity.java
au.com.cybersearch2.classyfy.NodeDetailsDialog.java
au.com.cybersearch2.classyfy.NodeDetailsFragment.java
au.com.cybersearch2.classyfy.ProgressFragment.java
au.com.cybersearch2.classyfy.TitleSearchResultsActivityTest.java
au.com.cybersearch2.classyfy.TitleSearchResultsActivity.java
au.com.cybersearch2.classyfy.TitleSearchResultsFragment.java
au.com.cybersearch2.classyfy.data.DataLoader.java
au.com.cybersearch2.classyfy.data.DataStreamParser.java
au.com.cybersearch2.classyfy.data.FieldDescriptor.java
au.com.cybersearch2.classyfy.data.FilePlanNodeType.java
au.com.cybersearch2.classyfy.data.ManagedRecord.java
au.com.cybersearch2.classyfy.data.Model.java
au.com.cybersearch2.classyfy.data.RecordCategory.java
au.com.cybersearch2.classyfy.data.RecordField.java
au.com.cybersearch2.classyfy.data.RecordFolder.java
au.com.cybersearch2.classyfy.data.SqlFromNodeGenerator.java
au.com.cybersearch2.classyfy.data.alfresco.AlfrescoFilePlanLoaderModule.java
au.com.cybersearch2.classyfy.data.alfresco.AlfrescoFilePlanLoader.java
au.com.cybersearch2.classyfy.data.alfresco.AlfrescoFilePlanXmlParser.java
au.com.cybersearch2.classyfy.helper.FileUtils.java
au.com.cybersearch2.classyfy.provider.ClassyFyProviderTest.java
au.com.cybersearch2.classyfy.provider.ClassyFyProvider.java
au.com.cybersearch2.classyfy.provider.ClassyFySearchEngine.java
au.com.cybersearch2.classyjpa.entity.LoaderPersistenceContainerTest.java
au.com.cybersearch2.classyjpa.entity.TestPersistenceWork.java
au.com.cybersearch2.classyjpa.entity.UserPersistenceContainerTest.java
au.com.cybersearch2.classyutil.Transcript.java
au.com.cybersearch2.example.AndroidHelloTwoDbsModule.java
au.com.cybersearch2.example.AndroidHelloTwoDbs.java
au.com.cybersearch2.example.AppThreadHelper.java
au.com.cybersearch2.example.AppThreadHelper.java
au.com.cybersearch2.example.HelloTwoDbsEnvironmentModule.java
au.com.cybersearch2.example.HelloTwoDbsEnvironmentModule.java
au.com.cybersearch2.example.v2.AndroidHelloTwoDbsModule.java
au.com.cybersearch2.example.v2.AndroidHelloTwoDbs.java
au.com.cybersearch2.example.v2.HelloTwoDbsEnvironmentModule.java
com.example.hellotwodbs.HelloTwoDbsApplication.java
com.example.hellotwodbs.HelloTwoDbsApplication.java
com.example.hellotwodbs.HelloTwoDbs.java
com.example.hellotwodbs.HelloTwoDbs.java