ROOT logo
// $Id: AEVAlienUI.cxx 2597 2011-11-13 08:03:06Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

//__________________________________________________________________________
// AEVAlienUI
//
//

#include "AEVAlienUI.h"
#include "AEVAlienUI.c7"
#include "AEVSite.h"

#include <Glasses/ZQueen.h>
#include <Stones/ZComet.h>
#include <TFile.h>

ClassImp(AEVAlienUI);

/**************************************************************************/

void AEVAlienUI::_init()
{
  mSites = 0;
  bConnected = false;
  mBDP.init("AEVAlienUI");
}

AEVAlienUI::~AEVAlienUI()
{
  if(bConnected) {
    mBDP.close_fifos();
  }
  system(GForm("rm -rf %s", mBDP.fDir.Data()));
}

/**************************************************************************/

void AEVAlienUI::AdEnlightenment()
{
  PARENT_GLASS::AdEnlightenment();
  if(mSites == 0) {
    assign_link<ZNameMap>(mSites, FID(), "AliEn Sites",
			  GForm("AliEn Sites of %s", GetName()));
    mSites->SetElementFID(AEVSite::FID());
    mSites->SetMIRActive(false);
  }
}

/**************************************************************************/

void AEVAlienUI::Connect()
{
  static const Exc_t _eh("AEVAlienUI::Connect ");

  ZMIR* mir = suggest_MIR_presence(_eh, ZGlass::MC_IsFlare);

  if(IsSunOrFireSpace()) {
    if(bConnected) {
      throw(_eh + "already connected.");
    }

    GMutexHolder ali_lock(hAliEnLock);

    //int cmdret = system
    //  (GForm("aev_ui %s %s > %s/aev_log 2>&1 &",
    //     mBDP.fAtoBName.c_str(), mBDP.fBtoAName.c_str(), mBDP.fDir.c_str())
    //  );

    mBDP.open_BtoA();
    mBDP.read_line();
    if(strncmp(mBDP.fRB,"ERR",3) == 0) {
      mBDP.read_line();
      mBDP.close_fifos();
      if(mir) {
	throw(_eh + "initialization error: " + mBDP.fRB);
      } else {
	ISerr(_eh + "initialization error: " + mBDP.fRB);
	return;
      }
    }
    mBDP.open_AtoB();
  }

  bConnected = true;
  Stamp(FID());
}

void AEVAlienUI::Disconnect()
{
  static const Exc_t _eh("AEVAlienUI::Disconnect ");

  suggest_MIR_presence(_eh, ZGlass::MC_IsFlare);

  if(IsSunOrFireSpace()) {
    if(!bConnected) {
      throw(_eh + "not connected.");
    }

    GMutexHolder ali_lock(hAliEnLock);
    mBDP.close_fifos();
    // printf("fifos closed ...\n");
  }

  bConnected = false;
  Stamp(FID());
}

/**************************************************************************/

void AEVAlienUI::ImportSites(const Text_t* partition)
{
  static const Exc_t _eh("AEVAlienUI::ImportSites ");

  using namespace AEV_NS;

  alien_lock();
  int n = mBDP.send_command(GForm("dump_sites\n%s", partition ? partition : ""));
  if(n > 0) {
    // printf("Importing %d sites ...\n", n);
    for(int i=0; i<n; ++i) {
      AEVSite *_s = new AEVSite, &s = *_s;
      s.SetName(mBDP.read_line());
      s.SetLocation(mBDP.read_line());
      s.SetDomain(mBDP.read_line());
      // s.SetSiteId(mBDP.read_int());
      // s.SetMasterHostId(mBDP.read_int());
      s.SetLatitude(mBDP.read_double());
      s.SetLongitude(mBDP.read_double());

      if(s.mName.CompareTo(s.mLocation) == 0)
	s.SetTitle(s.mName);
      else
	s.SetTitle(GForm("%s@%s", s.mName.Data(), s.mLocation.Data()));

    ZNameMap* l = new ZNameMap("AliEn Sites", GForm("Nests of %s", GetName()));
    l->SetElementFID(AEVSite::FID());
    mQueen->CheckIn(_s);
    try {
      mSites->Add(_s);
    }
    catch(Exc_t& exc) {
      mQueen->RemoveLens(_s);
      ISerr(_eh + GForm("error inserting site %s (%s).", s.mName.Data(), exc.Data()));
    }

    }
  } else {
    printf("ERROR: %s\n", mBDP.fError.Data());
  }
  alien_unlock();
}

void AEVAlienUI::SaveSites(const Text_t* file)
{
  // OK ... this is messy ... need REAL root support.
  ZComet c("AEVSites");

  {
  AList::Stepper<> s(*mSites);
  while(s.step())
    c.AddTopLevel(*s, false, false, 0);
  }

  TFile f(file, "RECREATE");
  c.Write();
  f.Close();
}

void AEVAlienUI::LoadSites(const Text_t* file)
{
  static const Exc_t _eh("AEVAlienUI::LoadSites ");

  mSites->ClearList();

  TFile f(file, "READ");
  auto_ptr<ZComet> c( dynamic_cast<ZComet*>(f.Get("AEVSites")) );
  f.Close();
  if(c.get() == 0) {
    // This check should be more elaborate ... but need common infrastructure
    // anyway.
    throw(_eh + "could not read 'AEVSites' from file '" + file + "'.");
  }
  mQueen->AdoptComet(*mSites, 0, c.get());
}

/**************************************************************************/

void AEVAlienUI::FindExCountFilesPerSite(map<string,int>& cmap,
					 const Text_t* path,
					 const Text_t* wcard)
{
  static const Exc_t _eh("AEVAlienUI::FindEx ");
  using namespace AEV_NS;

  alien_lock();
  int n = mBDP.send_command(GForm("find_ex\n%s\n%s", path, wcard));
  if(n > 0) {
    printf("%s found %d files ...\n", _eh.Data(), n);
    for(int i=0; i<n; ++i) {
      string lfn(mBDP.read_line());
      string site(mBDP.read_line());
      cmap[site]++;
    }
  } else {
    if(mBDP.bError) {
      printf("ERROR: %s\n", mBDP.fError.Data());
    } else {
      printf("No matching files found.\n");
    }
  }
  alien_unlock();
}

/**************************************************************************/
 AEVAlienUI.cxx:1
 AEVAlienUI.cxx:2
 AEVAlienUI.cxx:3
 AEVAlienUI.cxx:4
 AEVAlienUI.cxx:5
 AEVAlienUI.cxx:6
 AEVAlienUI.cxx:7
 AEVAlienUI.cxx:8
 AEVAlienUI.cxx:9
 AEVAlienUI.cxx:10
 AEVAlienUI.cxx:11
 AEVAlienUI.cxx:12
 AEVAlienUI.cxx:13
 AEVAlienUI.cxx:14
 AEVAlienUI.cxx:15
 AEVAlienUI.cxx:16
 AEVAlienUI.cxx:17
 AEVAlienUI.cxx:18
 AEVAlienUI.cxx:19
 AEVAlienUI.cxx:20
 AEVAlienUI.cxx:21
 AEVAlienUI.cxx:22
 AEVAlienUI.cxx:23
 AEVAlienUI.cxx:24
 AEVAlienUI.cxx:25
 AEVAlienUI.cxx:26
 AEVAlienUI.cxx:27
 AEVAlienUI.cxx:28
 AEVAlienUI.cxx:29
 AEVAlienUI.cxx:30
 AEVAlienUI.cxx:31
 AEVAlienUI.cxx:32
 AEVAlienUI.cxx:33
 AEVAlienUI.cxx:34
 AEVAlienUI.cxx:35
 AEVAlienUI.cxx:36
 AEVAlienUI.cxx:37
 AEVAlienUI.cxx:38
 AEVAlienUI.cxx:39
 AEVAlienUI.cxx:40
 AEVAlienUI.cxx:41
 AEVAlienUI.cxx:42
 AEVAlienUI.cxx:43
 AEVAlienUI.cxx:44
 AEVAlienUI.cxx:45
 AEVAlienUI.cxx:46
 AEVAlienUI.cxx:47
 AEVAlienUI.cxx:48
 AEVAlienUI.cxx:49
 AEVAlienUI.cxx:50
 AEVAlienUI.cxx:51
 AEVAlienUI.cxx:52
 AEVAlienUI.cxx:53
 AEVAlienUI.cxx:54
 AEVAlienUI.cxx:55
 AEVAlienUI.cxx:56
 AEVAlienUI.cxx:57
 AEVAlienUI.cxx:58
 AEVAlienUI.cxx:59
 AEVAlienUI.cxx:60
 AEVAlienUI.cxx:61
 AEVAlienUI.cxx:62
 AEVAlienUI.cxx:63
 AEVAlienUI.cxx:64
 AEVAlienUI.cxx:65
 AEVAlienUI.cxx:66
 AEVAlienUI.cxx:67
 AEVAlienUI.cxx:68
 AEVAlienUI.cxx:69
 AEVAlienUI.cxx:70
 AEVAlienUI.cxx:71
 AEVAlienUI.cxx:72
 AEVAlienUI.cxx:73
 AEVAlienUI.cxx:74
 AEVAlienUI.cxx:75
 AEVAlienUI.cxx:76
 AEVAlienUI.cxx:77
 AEVAlienUI.cxx:78
 AEVAlienUI.cxx:79
 AEVAlienUI.cxx:80
 AEVAlienUI.cxx:81
 AEVAlienUI.cxx:82
 AEVAlienUI.cxx:83
 AEVAlienUI.cxx:84
 AEVAlienUI.cxx:85
 AEVAlienUI.cxx:86
 AEVAlienUI.cxx:87
 AEVAlienUI.cxx:88
 AEVAlienUI.cxx:89
 AEVAlienUI.cxx:90
 AEVAlienUI.cxx:91
 AEVAlienUI.cxx:92
 AEVAlienUI.cxx:93
 AEVAlienUI.cxx:94
 AEVAlienUI.cxx:95
 AEVAlienUI.cxx:96
 AEVAlienUI.cxx:97
 AEVAlienUI.cxx:98
 AEVAlienUI.cxx:99
 AEVAlienUI.cxx:100
 AEVAlienUI.cxx:101
 AEVAlienUI.cxx:102
 AEVAlienUI.cxx:103
 AEVAlienUI.cxx:104
 AEVAlienUI.cxx:105
 AEVAlienUI.cxx:106
 AEVAlienUI.cxx:107
 AEVAlienUI.cxx:108
 AEVAlienUI.cxx:109
 AEVAlienUI.cxx:110
 AEVAlienUI.cxx:111
 AEVAlienUI.cxx:112
 AEVAlienUI.cxx:113
 AEVAlienUI.cxx:114
 AEVAlienUI.cxx:115
 AEVAlienUI.cxx:116
 AEVAlienUI.cxx:117
 AEVAlienUI.cxx:118
 AEVAlienUI.cxx:119
 AEVAlienUI.cxx:120
 AEVAlienUI.cxx:121
 AEVAlienUI.cxx:122
 AEVAlienUI.cxx:123
 AEVAlienUI.cxx:124
 AEVAlienUI.cxx:125
 AEVAlienUI.cxx:126
 AEVAlienUI.cxx:127
 AEVAlienUI.cxx:128
 AEVAlienUI.cxx:129
 AEVAlienUI.cxx:130
 AEVAlienUI.cxx:131
 AEVAlienUI.cxx:132
 AEVAlienUI.cxx:133
 AEVAlienUI.cxx:134
 AEVAlienUI.cxx:135
 AEVAlienUI.cxx:136
 AEVAlienUI.cxx:137
 AEVAlienUI.cxx:138
 AEVAlienUI.cxx:139
 AEVAlienUI.cxx:140
 AEVAlienUI.cxx:141
 AEVAlienUI.cxx:142
 AEVAlienUI.cxx:143
 AEVAlienUI.cxx:144
 AEVAlienUI.cxx:145
 AEVAlienUI.cxx:146
 AEVAlienUI.cxx:147
 AEVAlienUI.cxx:148
 AEVAlienUI.cxx:149
 AEVAlienUI.cxx:150
 AEVAlienUI.cxx:151
 AEVAlienUI.cxx:152
 AEVAlienUI.cxx:153
 AEVAlienUI.cxx:154
 AEVAlienUI.cxx:155
 AEVAlienUI.cxx:156
 AEVAlienUI.cxx:157
 AEVAlienUI.cxx:158
 AEVAlienUI.cxx:159
 AEVAlienUI.cxx:160
 AEVAlienUI.cxx:161
 AEVAlienUI.cxx:162
 AEVAlienUI.cxx:163
 AEVAlienUI.cxx:164
 AEVAlienUI.cxx:165
 AEVAlienUI.cxx:166
 AEVAlienUI.cxx:167
 AEVAlienUI.cxx:168
 AEVAlienUI.cxx:169
 AEVAlienUI.cxx:170
 AEVAlienUI.cxx:171
 AEVAlienUI.cxx:172
 AEVAlienUI.cxx:173
 AEVAlienUI.cxx:174
 AEVAlienUI.cxx:175
 AEVAlienUI.cxx:176
 AEVAlienUI.cxx:177
 AEVAlienUI.cxx:178
 AEVAlienUI.cxx:179
 AEVAlienUI.cxx:180
 AEVAlienUI.cxx:181
 AEVAlienUI.cxx:182
 AEVAlienUI.cxx:183
 AEVAlienUI.cxx:184
 AEVAlienUI.cxx:185
 AEVAlienUI.cxx:186
 AEVAlienUI.cxx:187
 AEVAlienUI.cxx:188
 AEVAlienUI.cxx:189
 AEVAlienUI.cxx:190
 AEVAlienUI.cxx:191
 AEVAlienUI.cxx:192
 AEVAlienUI.cxx:193
 AEVAlienUI.cxx:194
 AEVAlienUI.cxx:195
 AEVAlienUI.cxx:196
 AEVAlienUI.cxx:197
 AEVAlienUI.cxx:198
 AEVAlienUI.cxx:199
 AEVAlienUI.cxx:200
 AEVAlienUI.cxx:201
 AEVAlienUI.cxx:202
 AEVAlienUI.cxx:203
 AEVAlienUI.cxx:204
 AEVAlienUI.cxx:205
 AEVAlienUI.cxx:206
 AEVAlienUI.cxx:207
 AEVAlienUI.cxx:208
 AEVAlienUI.cxx:209
 AEVAlienUI.cxx:210
 AEVAlienUI.cxx:211
 AEVAlienUI.cxx:212
 AEVAlienUI.cxx:213
 AEVAlienUI.cxx:214
 AEVAlienUI.cxx:215
 AEVAlienUI.cxx:216
 AEVAlienUI.cxx:217