Package com.onpositive.gae.tools.core

Source Code of com.onpositive.gae.tools.core.FetchLogsJob

package com.onpositive.gae.tools.core;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.ArrayList;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;

import com.google.appengine.tools.admin.AdminException;
import com.google.appengine.tools.admin.AppAdmin;
import com.google.appengine.tools.admin.AppAdmin.LogSeverity;
import com.google.appengine.tools.admin.AppAdminFactory;
import com.google.appengine.tools.admin.AppAdminFactory.ConnectOptions;
import com.google.appengine.tools.admin.Application;
import com.onpositive.gae.tools.Activator;

public class FetchLogsJob extends Job {

  IJavaProject javaGProject;
  int count;
  LogSeverity severity;
  ArrayList<LogItem> result = new ArrayList<LogItem>();
  StringBuilder logContent = new StringBuilder();

  public FetchLogsJob(IJavaProject pr, String name, int count,
      LogSeverity severity) {
    super(name);
    this.javaGProject = pr;
    this.count = count;
    this.severity = severity;
  }

  protected IStatus run(IProgressMonitor monitor) {

    Application readApplication = null;
    try {
      IPackageFragmentRoot[] packageFragmentRoots = javaGProject
          .getPackageFragmentRoots();
      for (IPackageFragmentRoot r : packageFragmentRoots) {
        int kind = r.getKind();
        if (kind == IPackageFragmentRoot.K_BINARY) {
          String elementName = r.getElementName();
          if (elementName.startsWith("appengine-local-runtime")) {
            File fl = r.getPath().toFile().getParentFile()
                .getParentFile().getParentFile();
            System.setProperty("appengine.sdk.root",
                fl.getAbsolutePath() + File.separatorChar);
          }
          System.out.println(elementName);
        }
      }
      IProject javaProj = javaGProject.getProject();
      IContainer warLocation = WebRootDirProvider.calculate(javaProj);
      if (!warLocation.exists()) {
        throw new FileNotFoundException("War Directory not found");
      }
      readApplication = Application.readApplication(warLocation
          .getLocation().toOSString());
    } catch (IOException e) {
      if (e instanceof FileNotFoundException) {
        Display.getDefault().syncExec(new Runnable() {

         
          public void run() {
            MessageDialog.openError(Display.getDefault()
                .getActiveShell(), "Error",
                "War directory did not found.");
            PreferencesUtil.createPreferenceDialogOn(Display
                .getDefault().getActiveShell(),
                "com.onpositive.gae.tools.core.weblocation",
                new String[] {}, null);
          }

        });
      }
      return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
          IStatus.ERROR, e.getMessage(), e);
    } catch (JavaModelException e) {
      e.printStackTrace();
    }

    ConnectOptions connectOptions = ConnectionOptionsManager
        .getOptions(readApplication.getAppId());
    if (connectOptions == null) {
      return Status.CANCEL_STATUS;
    }
    AppAdmin createAppAdmin2 = new AppAdminFactory().createAppAdmin(
        connectOptions, readApplication, new PrintWriter(System.err));
    try {
      Reader requestLogs = createAppAdmin2.requestLogs(count, severity);

      BufferedReader bufferedReader = new BufferedReader(requestLogs);
      while (true) {
        try {
          String str = bufferedReader.readLine();
          if (str == null) {
            break;
          }
          result.add(new LogItem(str));
          logContent.append(str);
          logContent.append('\n');
        } catch (IOException e) {
          Activator.log(e);
        }

      }
    } catch (final AdminException e) {
      Display.getDefault().syncExec(new Runnable() {

        public void run() {
          MessageDialog.openError(Display.getCurrent()
              .getActiveShell(), "Error", e.getMessage());
        }
      });
      // run(monitor);
    }
    return Status.OK_STATUS;
  }

  public LogItem[] getLogs() {
    return result.toArray(new LogItem[result.size()]);
  }

  public String getLogContent() {
    return logContent.toString();
  }
}
TOP

Related Classes of com.onpositive.gae.tools.core.FetchLogsJob

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.