Android Open Source - classy_apps Alfresco File Plan Loader






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
//from  w w w.ja va2  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.data.alfresco;

import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.io.ByteArrayOutputStream;
import java.sql.SQLException;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityTransaction;

import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.support.DatabaseConnection;

import android.net.Uri;
import au.com.cybersearch2.classydb.SqlParser;
import au.com.cybersearch2.classydb.SqlParser.StatementCallback;
import au.com.cybersearch2.classyfy.ClassyFyApplication;
import au.com.cybersearch2.classyfy.data.DataLoader;
import au.com.cybersearch2.classyfy.data.DataStreamParser;
import au.com.cybersearch2.classynode.Node;
import au.com.cybersearch2.classyfy.data.SqlFromNodeGenerator;
import au.com.cybersearch2.classyinject.DI;
import au.com.cybersearch2.classyjpa.persist.Persistence;
import au.com.cybersearch2.classyjpa.persist.PersistenceAdmin;
import au.com.cybersearch2.classyjpa.persist.PersistenceFactory;
import au.com.cybersearch2.classyjpa.transaction.EntityTransactionImpl;
import au.com.cybersearch2.classyjpa.transaction.TransactionCallable;
import au.com.cybersearch2.classytask.Executable;
import au.com.cybersearch2.classytask.WorkStatus;
import au.com.cybersearch2.classytask.WorkTracker;
import au.com.cybersearch2.classyfy.helper.FileUtils;

/**
 * AlfrescoFilePlanLoader
 * @author Andrew Bowley
 * 14/04/2014
 */
public class AlfrescoFilePlanLoader implements DataLoader
{
    protected ByteArrayInputStream instream;
    protected PersistenceAdmin persistenceAdmin;
    @Inject @Named("AlfrescoFilePlan") DataStreamParser dataStreamParser;
    @Inject SqlFromNodeGenerator sqlFromNodeGenerator;
    @Inject PersistenceFactory persistenceFactory;
    
    public AlfrescoFilePlanLoader()
    {
        DI.inject(new AlfrescoFilePlanLoaderModule(), this);
        Persistence persistence = persistenceFactory.getPersistenceUnit(ClassyFyApplication.PU_NAME);
        persistenceAdmin = persistence.getPersistenceAdmin();
    }
    
    @Override
    public Executable loadData(final Uri uri) throws IOException 
    {
        FileUtils.validateUri(uri, ".*\\.xml");
        File dataFile = new File(uri.getPath());
        InputStream is = new FileInputStream(dataFile);
        Node rootNode = dataStreamParser.parseDataStream(is);
        is.close();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Writer writer = new BufferedWriter(new OutputStreamWriter(baos));
        sqlFromNodeGenerator.generateSql(rootNode, writer); 
        writer.flush();
        instream = new ByteArrayInputStream(baos.toByteArray());
      // Database work is executed in a transaction
        final TransactionCallable processFilesCallable = new TransactionCallable()
        {

      @Override
      public Boolean call(final DatabaseConnection databaseConnection)
          throws Exception 
      {
            StatementCallback callback = new StatementCallback(){
                
                @Override
                public void onStatement(String statement) throws SQLException {
                    databaseConnection.executeStatement(statement, DatabaseConnection.DEFAULT_RESULT_FLAGS);
                }};
                SqlParser sqlParser = new SqlParser();
                sqlParser.parseStream(instream, callback);
                //if (log.isLoggable(TAG, Level.FINE))
                //    log.debug(TAG, "Executed " + sqlParser.getCount() + " statements from " + uri.toString());
            return true;
      }
        };
        return executeTask(processFilesCallable);
    }
    
    
    protected Executable executeTask(final TransactionCallable processFilesCallable) 
    {
        final WorkTracker workTracker = new WorkTracker();
    Runnable runnable = new Runnable()
        {

      @Override
      public void run() 
      {
        try
        {
          workTracker.setStatus(WorkStatus.RUNNING);
              // Execute task on transaction commit using Callable
              ConnectionSource connectionSource = persistenceAdmin.getConnectionSource();
             EntityTransaction transaction = new EntityTransactionImpl(connectionSource, processFilesCallable);
              transaction.begin();
              transaction.commit();
          workTracker.setStatus(WorkStatus.FINISHED);
        }
        finally
        {
          if (workTracker.getStatus() != WorkStatus.FINISHED)
            workTracker.setStatus(WorkStatus.FAILED);
        }
        synchronized(workTracker)
        {
          workTracker.notifyAll();
        }
      }
          
        };
        new Thread(runnable).start();
        return workTracker;
    }

}




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