Пример #1
0
void PackageService::onFinish()
{
	FinishSqliteVFS();

	// Turn off all sticky flags - NO MERCY!
	for (PackageNameMap::iterator itr = _linkedPackages.begin(), end = _linkedPackages.end(); itr != end; ++itr)
	{
		itr->second->_stayResident = false;
		itr->second->_stayForCurrent = false;
		itr->second->_stayForNext = false;
	}

	// And compact so that all packages get disposed
	compact();

	// If Something's remaining, we're in danger!
	for (PackageNameMap::iterator itr = _linkedPackages.begin(), end = _linkedPackages.end(); itr != end; ++itr)
	{
		Package* pack = itr->second;
		LOG(0, "*** Package '%s': still alive: %d usage, requires:\n", pack->getName().c_str(), pack->getUseCount());
		if (pack->getRequiredList().empty())
			LOG(0, "  <none>\n");
		else
			pack->printDependancy(1);
	}

	// Terminate AsyncLoader
	if (_asyncLoader)
	{
		_asyncLoader->Terminate();
	}

	safeDelete(_asyncLoader);
}
bool ApplicationPackage::doActivate()
{
	trace_enter();

	PackageList::iterator iter = m_pkgList.begin();
	for (; iter != m_pkgList.end(); ++iter) {
		Package *pkg = *iter;
		if (pkg->activate() == false) {
			log_error("error activating : name=" << pkg->getName());
			return false;
		}
	}

	return true;
}
bool ApplicationPackage::doPassivate()
{
	trace_enter();

	bool isPassivated = true;
	PackageList::iterator iter = m_pkgList.begin();
	for (; iter != m_pkgList.end(); ++iter) {
		Package *pkg = *iter;
		if (pkg->passivate() == false) {
			log_error("error passivating : name=" << pkg->getName());
			isPassivated = false;
		}
	}

	return isPassivated;
}
Package *ApplicationPackage::findChildPackage(const std::string &name)
{
	PackageList::iterator pkgIter = m_pkgList.begin();
	for(;pkgIter != m_pkgList.end(); ++pkgIter)
	{
		Package *ppkg = *pkgIter;

		if (ppkg != NULL)
		{
			if (!ppkg->getName().compare(name))
			{
				return ppkg;
			}
		}
	}

	return NULL;
}
bool ApplicationPackage::doConnectPort()
{
	trace_enter();

//	log_debug("[] Start Connecting Ports : name=" + getName());

	// 패키지에 속해 있는 모든 컴포넌트의 포트를 연결 함
	PackageList::iterator iter = m_pkgList.begin();
	for (; iter != m_pkgList.end(); ++iter) {
		Package *pkg = *iter;
		if (pkg->connectPort() == false) {
			log_error("error connectPort : name=" << pkg->getName());
			return false;
		}
	}

	return connectPortThis();
}
bool ApplicationPackage::doUnload()
{
	trace_enter();

	// 패키지에 속해 있는 모든 컴포넌트를 언로드 함
	PackageList::iterator iter = m_pkgList.begin();
	for (; iter != m_pkgList.end(); ++iter) {
		Package *pkg = *iter;
		// 하나라도 실패하면 false 리턴
		if (pkg->unload() == false) {
			log_error("error unload component : name =" << pkg->getName());
			//return false;
		}		
		delete pkg;
	}
	m_pkgList.clear();

	return true;
}
bool ApplicationPackage::doDisconnectPort()
{
	trace_enter();

	bool isDisconnected;
	if (disconnectPortThis()) isDisconnected = true;
	else isDisconnected = false;

	// 패키지에 속해 있는 모든 컴포넌트의 포트 연결을 해제함
	PackageList::iterator iter = m_pkgList.begin();
	for (; iter != m_pkgList.end(); ++iter) {
		Package *pkg = *iter;
		if (pkg->disconnectPort()== false) {
			isDisconnected = false;
			log_error("error disconnectPort : name=" << pkg->getName());
		}
	}

	return isDisconnected;
}
Пример #8
0
void PackagesPage::onPackageRemove()
{
    QModelIndex index = _ui->_listPackages->currentIndex();
    Package package = PackageTable::getFromModel(_model, index.row());

    QMessageBox msg(this);
    msg.setWindowIcon(getIcon());
    msg.setWindowTitle(tr("Remove package?"));
    msg.setInformativeText(tr("Are you sure to delete package\n'%1'\nwith description\n'%2'?").arg(package.getName()).arg(package.getDescription()));
    msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);
    msg.setDefaultButton(QMessageBox::No);
    msg.setIcon(QMessageBox::Warning);
    int button = msg.exec();
    if(button!=QMessageBox::Yes) return;

    bool ok = _model->removeRow(index.row());
    if(!ok) {
        QMessageBox::critical(this, tr("Error"), tr("Could not remove package:\n %1").arg(_model->lastError().text()));
        return;
    }
    _model->submitAll();
    onCurrentRowChanged(QModelIndex());
}
bool ApplicationPackage::loadComponentList(ComponentInfoList &list)
{
	trace_enter();

	ComponentManager *cmgr = portable_dynamic_cast(ComponentManager *, Registry::getRegistry()->getManager(COMPONENT_MANAGER));
	if (cmgr == NULL) {
		log_error("ComponentManager is NULL");
		return false;
	}

	ComponentPackage *pkg;
	ComponentInfoList::iterator iter = list.begin();
	for (; iter != list.end(); ++iter) {
		pkg = NULL;

		ComponentInfo &cinfo = *iter;
		// node_id가 없으면("")이면 local node id로 세팅
		if (cinfo.node_id == "") {
			cinfo.node_id = cmgr->getNodeLocator()->getLocalNodeId();
		}
		if (cinfo.node_id != cmgr->getNodeLocator()->getLocalNodeId()) {

			ComponentPackage *cpkg = new ComponentPackage();
			cpkg->setNodeId(cinfo.node_id);
			cpkg->setParentId(this->m_name);
			pkg = cpkg;
		}
		else {
			switch (checkPackageType(getComponentPath(), cinfo.reference)) {
				case PKG_COMPOSITE :
					pkg = new ComponentPackage();
					pkg->setType(PKG_COMPOSITE);
					pkg->setParentId(this->m_name);
					break;

				case PKG_ATOMIC :
					pkg = new ComponentPackage();
					pkg->setType(PKG_ATOMIC);
					pkg->setParentId(this->m_name);
					break;
			}
		}

		if (pkg != NULL) {
			pkg->setName(cinfo.name);
			string dirName = OS::splitExt(getReference());
			pkg->setPath(OS::toDir(getPath() + dirName));
			pkg->setReference(cinfo.reference);
			pkg->setPackageManager(getPackageManager());


			//
			//  pkg-load 에서 컴포넌트를 executor list에 넣는다.
			// 이부분을 list가 완료된 이후로 놓는것이 좋겠음.
		//	if (!pkg->load()) {			 
		//		log_error("Package Loading error : pkg.name");
		//		delete pkg;
		//		return false;
		//	}


			// setup coordination information into componentpackage
			CoordinationInfoList::iterator coorditer = m_profile->coordinationInfoList.begin();

			for (; coorditer != m_profile->coordinationInfoList.end(); ++coorditer) {
				CoordinationInfo &coordinfo = *coorditer;

				if (!coordinfo.sourceComponentName.compare(cinfo.name))
				{
					pkg->beforeComponentList.push_back(coordinfo.targetComponentName);
				}
				else
				if (!coordinfo.targetComponentName.compare(cinfo.name))
				{
					pkg->afterComponentList.push_back(coordinfo.sourceComponentName);
				}
			}

			pkg->beforeComponentList.unique();
			pkg->afterComponentList.unique();

			// remove local circle
			std::list<std::string>::iterator xxiter = pkg->beforeComponentList.begin();

 			for (;xxiter != pkg->beforeComponentList.end(); ++xxiter)
			{
				std::string &nstr = *xxiter;			

				pkg->afterComponentList.remove(nstr);				
			}

			std::string lastAfter;
			int lastIndex = -1;			

			//  누군가의 뒤에 위치해야 하는지 검사
			xxiter = pkg->afterComponentList.begin();

			for (;xxiter != pkg->afterComponentList.end(); ++ xxiter)
			{
				std::string &nstr = *xxiter;
				PackageList::iterator pkgIter = m_pkgList.begin();
				int index = 0;

				for (;pkgIter != m_pkgList.end(); ++ pkgIter)
				{
					Package *ppkg = *pkgIter;
					index++;					

					if (!nstr.compare(ppkg->getName()))
					{
						if (index > lastIndex)
						{
							lastAfter = nstr;
							lastIndex = index;
						}
						break;
					}
				}
			}
		

			if (lastIndex == -1)  // 앞에 있을 것이 없으므로 가장 앞에 넣는다
				m_pkgList.push_front(pkg);
			else
			{
				PackageList::iterator pkgIter = m_pkgList.begin();
				for (;pkgIter != m_pkgList.end(); ++ pkgIter)
				{
					Package *ppkg = *pkgIter;
					
					if (!lastAfter.compare(ppkg->getName()))
					{
						m_pkgList.insert(pkgIter,pkg);
						
						break;
					}
				}	
			}	 

		}
		else {
			log_error("Invalid Package Type : path=" << getPath() << ",ref=" << cinfo.reference);
			return false;
		}
	}


	PackageList::iterator pkgIter = m_pkgList.begin();
	for (;pkgIter != m_pkgList.end(); ++ pkgIter)
	{
		ComponentPackage *ppkg =dynamic_cast<ComponentPackage *>(*pkgIter);
		if (!ppkg->load()) {			 
				log_error("Package Loading error : pkg.name");		
				doUnload();
				return false;
		}

		/** load가 끝나야만 ComponentAdapter이 생성되므로 **/
		ComponentAdapter *t_ca = ppkg->getComponentAdapter();
		if (t_ca==NULL)
		{
				log_error("Component Adapter Loading error : pkg.name");		
				doUnload();
				return false;
		}

		CoordinationUnit *t_coord = t_ca->getCoordinationUnit();


		std::list<std::string>::iterator bc_it; 
		PackageList::iterator tt_iter;

		for (bc_it = ppkg->beforeComponentList.begin(); bc_it != ppkg->beforeComponentList.end(); bc_it++)
		{			
			ComponentPackage *temp_cp = dynamic_cast<ComponentPackage*>(findChildPackage( *bc_it));
			if (temp_cp != NULL)
			{
				ComponentAdapter *temp_cp_ca = temp_cp->getComponentAdapter();
				if (temp_cp_ca != NULL)
				{
					t_coord->addTrigger(temp_cp_ca->getCoordinationUnit());
				}
			}		
			
		}
		
		for (bc_it = ppkg->afterComponentList.begin(); bc_it != ppkg->afterComponentList.end(); bc_it++)
		{
			ComponentPackage *temp_cp = dynamic_cast<ComponentPackage*>(findChildPackage( *bc_it));
			if (temp_cp != NULL)
			{
				ComponentAdapter *temp_cp_ca = temp_cp->getComponentAdapter();
				if (temp_cp_ca != NULL)
				{
					t_coord->addFollower(temp_cp_ca->getCoordinationUnit());
				}
			}					
		} 
	}

	return true;
}