Exemple #1
0
bool UseCaseData::tool_cmd(ToolCom * com, const char * args,
			   BrowserNode * bn, const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case replaceExceptionCmd:
	if (!bn->is_writable() && !root_permission())
	  com->write_ack(FALSE);
	else {
	  set_extension_points(args);
	  com->write_ack(TRUE);
	}
	return TRUE;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
bool ClassInstanceData::change_rel(ToolCom * com, const char * args,
                                   bool isadd)
{
    com->get_unsigned(args); // 2

    BrowserRelation * r = (BrowserRelation *) com->get_id(args);
    BrowserClassInstance * other = (BrowserClassInstance *) com->get_id(args);

    if (r->deletedp() || other->deletedp()) {
        com->write_ack(FALSE);
        return FALSE;
    }

    RelationData * rd = (RelationData *) r->get_data();
    Q3ValueList<SlotRel>::Iterator it;

    for (it = relations.begin(); it != relations.end(); ++it) {
        const SlotRel & slot_rel = *it;

        if ((slot_rel.value == other) &&
            (r == ((slot_rel.is_a) ? rd->get_start() : rd->get_end())))
            break;
    }

    if (isadd) {
        if (it == relations.end()) {
            // not yet present
            QList<BrowserRelation *> l;

            cl->get_rels(((ClassInstanceData *)other->get_data())->cl, l);

            if ((! l.contains(r)) ||
                (!other->is_writable() && !root_permission())) {
                // illegal
                com->write_ack(FALSE);
                return FALSE;
            }

            // add it
            if (rd->is_a(r))
                add(other, rd);
            else
                ((ClassInstanceData *)other->get_data())
                ->add((BrowserClassInstance *) browser_node, rd);
        }
    }
    else if (it != relations.end()) {
        // remove it
        if (!other->is_writable() && !root_permission()) {
            // illegal
            com->write_ack(FALSE);
            return FALSE;
        }

        replace(other, rd, 0, (*it).is_a, 0);
    }

    return TRUE;
}
Exemple #3
0
bool ParameterData::tool_cmd(ToolCom * com, const char * args,
			     BrowserNode * bn, const QString & comment) {
  BooL ack;

  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      ack = FALSE;
    else {
      switch ((unsigned char) args[-1]) {
      case setDefaultValueCmd:
	default_value = args;
	ack = TRUE;
	break;
      default:
        if (! PinParamData::tool_cmd(com, args, ack))
	  return BasicData::tool_cmd(com, args, bn, comment);
      }
    }
  }
  else if (! PinParamData::tool_cmd(com, args, ack))
    return BasicData::tool_cmd(com, args, bn, comment);
  
  if (ack) {
    // ok case
    bn->package_modified();
    modified();
  }
  
  com->write_ack(ack);
  return TRUE;
}
Exemple #4
0
bool TransitionData::tool_cmd(ToolCom * com, const char * args,
			      BrowserNode * bn,
			      const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setUmlTriggerCmd:
	uml.trigger = args;
	break;
      case setUmlGuardCmd:
	uml.guard = args;
	break;
      case setUmlActivityCmd:
	uml.expr = args;
	break;
      case setCppTriggerCmd:
	cpp.trigger = args;
	break;
      case setCppGuardCmd:
	cpp.guard = args;
	break;
      case setCppActivityCmd:
	cpp.expr = args;
	break;
      case setJavaTriggerCmd:
	java.trigger = args;
	break;
      case setJavaGuardCmd:
	java.guard = args;
	break;
      case setJavaActivityCmd:
	java.expr = args;
	break;
      case setIsCppExternalCmd:
	if (*args != 0)
	  is_internal = FALSE;
	else if (get_start_node() != end) {
	  com->write_ack(FALSE);
	  return TRUE;
	}
	else
	  is_internal = TRUE;
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->package_modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
Exemple #5
0
bool PackageData::tool_cmd(ToolCom * com, const char * args,
			   BrowserNode * bn,
			   const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setCppSrcDirCmd:
	cpp_src_dir = args;
	break;
      case setCppHDirCmd:
	cpp_h_dir = args;
	break;
      case setCppNamespaceCmd:
	cpp_namespace = args;
	break;
      case setJavaDirCmd:
	java_dir = args;
	break;
      case setJavaPackageCmd:
	java_package = args;
	break;
      case setPhpDirCmd:
	php_dir = args;
	break;
      case setPhpNamespaceCmd:
	php_namespace = args;
	break;
      case setPythonDirCmd:
	python_dir = args;
	break;
      case setPythonPackageCmd:
	python_package = args;
	break;
      case setIdlDirCmd:
	idl_dir = args;
	break;
      case setIdlModuleCmd:
	idl_module = args;
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->package_modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
Exemple #6
0
bool BasicData::tool_cmd(ToolCom * com, const char * args,
			 BrowserNode * bn, const QString & comment) {
  switch ((unsigned char) args[-1]) {
  case setStereotypeCmd:
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      set_stereotype(args);
      browser_node->package_modified();
      modified();
      com->write_ack(TRUE);
    }
    break;
  case getDefCmd:
    send_uml_def(com, bn, comment);
    send_cpp_def(com);
    send_java_def(com);
    if (com->api_format() >= 34) {
      send_php_def(com);
      if (com->api_format() >= 39)
	send_python_def(com);
    }
    send_idl_def(com);
    break;
  case getUmlDefCmd:
    send_uml_def(com, bn, comment);
    break;
  case getCppDefCmd:
    send_uml_def(com, bn, comment);
    send_cpp_def(com);
    break;
  case getJavaDefCmd:
    send_uml_def(com, bn, comment);
    send_java_def(com);
    break;
  case getPhpDefCmd:
    send_uml_def(com, bn, comment);
    send_php_def(com);
    break;
  case getPythonDefCmd:
    send_uml_def(com, bn, comment);
    send_python_def(com);
    break;
  case getIdlDefCmd:
    send_uml_def(com, bn, comment);
    send_idl_def(com);
    break;
  default:
    return FALSE;
  }
  
  return TRUE;
}    
Exemple #7
0
bool ExtraMemberData::tool_cmd(ToolCom * com, const char * args,
			       BrowserNode * bn,
			       const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setCppDeclCmd:
	cpp_decl = args;
	break;
      case setCppDefCmd:
	cpp_def = args;
	break;
      case setIsCppInlineCmd:
	cpp_inline = (*args != 0);
	break;
      case setJavaDeclCmd:
	java_decl = args;
	break;
      case setPhpDeclCmd:
	php_decl = args;
	break;
      case setPythonDeclCmd:
	python_decl = args;
	break;
      case setIdlDeclCmd:
	idl_decl = args;
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
  
      // ok case
      bn->modified();
      bn->package_modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
Exemple #8
0
bool PinData::tool_cmd(ToolCom * com, const char * args,
		       BrowserNode * bn, const QString & comment) {
  BooL ack;

  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      ack = FALSE;
    else if (! PinParamData::tool_cmd(com, args, ack))
      return BasicData::tool_cmd(com, args, bn, comment);
  }
  else if (! PinParamData::tool_cmd(com, args, ack))
    return BasicData::tool_cmd(com, args, bn, comment);
  
  if (ack) {
    // ok case
    bn->package_modified();
    modified();
  }
  
  com->write_ack(ack);
  return TRUE;
}
Exemple #9
0
bool PseudoStateData::tool_cmd(ToolCom * com, const char * args,
			       BrowserNode * bn, const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setDerivedCmd:
	{
	  BrowserPseudoState * st = (BrowserPseudoState *) com->get_id(args);

	  if (st == reference) {
	    com->write_ack(TRUE);
	    return TRUE;
	  }
	  if ((st != 0) &&
	      !((BrowserPseudoState *) browser_node)->can_reference(st)) {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	  set_reference(st);
	}
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
bool StateActionData::tool_cmd(ToolCom * com, const char * args,
                               BrowserNode * bn,
                               const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        if (!bn->is_writable() && !root_permission())
            com->write_ack(FALSE);
        else {
            switch ((unsigned char) args[-1]) {
            case setDefCmd:
                uml = args;
                break;

            case setCppDeclCmd:
                cpp = args;
                break;

            case setJavaDeclCmd:
                java = args;
                break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }

            // ok case
            bn->package_modified();
            modified();
            com->write_ack(TRUE);
        }
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);

    return TRUE;
}
bool ActivityPartitionData::tool_cmd(ToolCom * com, const char * args,
                                     BrowserNode * bn,
                                     const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        if (!bn->is_writable() && !root_permission())
            com->write_ack(FALSE);
        else {
            switch ((unsigned char) args[-1]) {
            case setMultiplicityCmd:
                is_dimension = (*args != 0);
                break;

            case setIsCppExternalCmd:
                is_external = (*args != 0);
                break;

            case setDerivedCmd:
                represents = (BrowserNode *) com->get_id(args);
                break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }

            // ok case
            bn->package_modified();
            modified();
            com->write_ack(TRUE);
        }
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);

    return TRUE;
}
Exemple #12
0
bool ClassInstanceData::tool_cmd(ToolCom * com, const char * args,
				 BrowserNode * bn, const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setTypeCmd:
	set_class((BrowserClass *) com->get_id(args));
	break;
      case setAttributeCmd:
	{
	  BrowserAttribute * at = (BrowserAttribute *) com->get_id(args);
	  bool find = FALSE;
	  Q3ValueList<SlotAttr>::Iterator it_attr;
	  
	  for (it_attr = attributes.begin(); it_attr != attributes.end(); ++it_attr) {
	    SlotAttr & slot_attr = *it_attr;
	    
	    if (slot_attr.att == at) {
	      find = TRUE;
	      if (*args == 0)
		// remove it
		attributes.remove(it_attr);
	      else
		// replace it
		slot_attr.value = args;
	      break;
	    }
	  }
	  
	  if (! find) {
	    // add it
	    Q3PtrList<BrowserClass> l;
	    
	    cl->get_all_parents(l);
	    l.append(cl);
	    
	    if (at->deletedp() ||
		(l.findRef((BrowserClass *) at->parent())  == -1)) {
	      // illegal
	      com->write_ack(FALSE);
	      return TRUE;
	    }
	    attributes.append(SlotAttr(at, args));
	  }
	}
	break;
      case addRelationCmd:
	if (! change_rel(com, args, TRUE))
	  return TRUE;
	break;
      case removeRelationCmd:
	if (! change_rel(com, args, FALSE))
	  return TRUE;
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else {
    switch ((unsigned char) args[-1]) {
    case attributesCmd:
      if (args[0] == 0) {
	com->write_unsigned(attributes.count());
	
	Q3ValueList<SlotAttr>::Iterator it;
	
	for (it = attributes.begin(); it != attributes.end(); ++it) {
	  const SlotAttr & slot = *it;
	  
	  slot.att->write_id(com);
	  com->write_string(slot.value);
	}
      }
      else {
	// get all available attributes
	BrowserNodeList l;
	BrowserNode * bn;
	
	cl->get_attrs(l);
	com->write_unsigned(l.count());
	
	for (bn = l.first(); bn != 0; bn = l.next())
	  bn->write_id(com);
      }
      break;
    case relationsCmd:
      {
	BrowserClassInstance * other =
	  (BrowserClassInstance *) com->get_id(args);
	
	if (other == 0) {
	  com->write_unsigned(relations.count());
	  
	  Q3ValueList<SlotRel>::Iterator it;
	  
	  for (it = relations.begin(); it != relations.end(); ++it) {
	    const SlotRel & slot = *it;
	    
	    ((slot.is_a) ? slot.rel->get_start() : slot.rel->get_end())
	      ->write_id(com);
	    slot.value->write_id(com);
	  }
	}
	else {
	  // get all available relations
	  Q3PtrList<BrowserRelation> l;
	  BrowserRelation * r;
  
	  cl->get_rels(((ClassInstanceData *)other->get_data())->cl, l);
	  com->write_unsigned(l.count());
	
	  for (r = l.first(); r != 0; r = l.next())
	    r->write_id(com);
	}
      }
      break;
    default:
      return BasicData::tool_cmd(com, args, bn, comment);
    }
  }
  
  return TRUE;
}
Exemple #13
0
bool RelationData::tool_cmd(ToolCom * com, BrowserRelation * rel,
                            const char * args)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        if (!rel->is_writable() && !root_permission())
            com->write_ack(FALSE);
        else {
            RoleData & r = (rel == start) ? a : b;

            switch ((unsigned char) args[-1]) {
            case setDescriptionCmd:
                r.comment = args;
                break;

            case setStereotypeCmd:
                set_stereotype(args);
                modified();
                com->write_ack(TRUE);

                // send the other side to update it
                if (rel == start) {
                    if (end != 0)
                        end->write_id(com);
                    else
                        com->write_id(0);
                }
                else
                    start->write_id(com);

                return TRUE;

            case setRelationAssocClassCmd: {
                AType t;

                com->get_type(t, args);
                set_association(t);
                modified();
                com->write_ack(TRUE);

                // send the other side to update it
                if (rel == start) {
                    if (end != 0)
                        end->write_id(com);
                    else
                        com->write_id(0);
                }
                else
                    start->write_id(com);
            }

            return TRUE;

            case setNameCmd:
                name = args;
                break;

            case setDefaultValueCmd:
                r.init_value = args;
                break;

            case setIsClassMemberCmd:
                r.isa_class_relation = (*args != 0);
                break;

            case setIsVolatileCmd:
                r.isa_volatile_relation = (*args != 0);
                break;

            case setVisibilityCmd: {
                UmlVisibility v;

                if (! com->get_visibility(v, args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }

                r.uml_visibility = v;
            }
            break;

            case setConstraintCmd:
                r.constraint = args;
                break;

            case setCppDeclCmd:
                r.cpp_decl = args;
                break;

            case setJavaDeclCmd:
                r.java_decl = args;
                break;

            case setJavaAnnotationCmd: {
                WrapperStr s = args;

                s = s.stripWhiteSpace();

                if (! s.isEmpty())
                    s += '\n';

                r.java_annotation = s;
            }
            break;

            case setPhpDeclCmd:
                r.php_decl = args;
                break;

            case setPythonDeclCmd:
                r.python_decl = args;
                break;

            case setIdlDeclCmd:
                r.idl_decl = args;
                break;

            case setCppVisibilityCmd: {
                UmlVisibility v;

                if (! com->get_visibility(v, args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }

                r.cpp_visibility = v;
            }
            break;

            case setIsReadOnlyCmd:
                r.isa_const_relation = (*args != 0);
                break;

            case setIsCppMutableCmd:
                r.cpp_mutable = (*args != 0);
                break;

            case setRoleNameCmd:
                if ((rel == start) ? wrong_role_a_name(args)
                    : wrong_role_b_name(args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }

                r.role = args;
                break;

            case setMultiplicityCmd:
                r.multiplicity = args;
                break;

            case setCppVirtualInheritanceCmd:
                r.cpp_virtual_inheritance = (*args != 0);
                break;

            case setIsIdlTruncatableCmd:
                r.idl_truncatable_inheritance = (*args != 0);;
                break;

            case setIsJavaTransientCmd:
                r.java_transient = (*args != 0);
                break;

            case setIdlCaseCmd: {
                BrowserAttribute * at = (BrowserAttribute *) com->get_id(args);

                set_idlcase(r, at, args);
            }
            break;

            case setDerivedCmd:
                switch (*args) {
                case 0:
                    r.is_derived = r.is_derivedunion = FALSE;
                    break;

                case 1:
                    r.is_derived = TRUE;
                    r.is_derivedunion = FALSE;
                    break;

                case 3:
                    r.is_derived = r.is_derivedunion = TRUE;
                    break;

                default:
                    // derived union but non derived
                    com->write_ack(FALSE);
                    return TRUE;
                }

                break;

            case setOrderingCmd:
                r.is_ordered = (*args != 0);
                break;

            case setUniqueCmd:
                r.is_unique = (*args != 0);
                break;

            case setTypeCmd:
                // only inside associations
            {
                UmlCode c;

                if (!com->get_relation_kind(c, args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }
                else {
                    type = c;

                    if (end)
                        end->package_modified();

                    if (check_end_visibility())
                        end->modified();

                    start->modified();
                    start->package_modified();
                    modified();
                }
            }
            break;

            default:
                return FALSE;
            }

            // ok case
            if (rel == start) {
                start->modified();
                start->package_modified();
            }
            else {
                end->modified();
                end->package_modified();
            }

            modified();
            com->write_ack(TRUE);
        }
    }
    else {
        switch ((unsigned char) args[-1]) {
        case getDefCmd:
            send_uml_def(com, rel);
            send_cpp_def(com, rel);
            send_java_def(com, rel);

            if (com->api_format() >= 34) {
                send_php_def(com, rel);

                if (com->api_format() >= 39)
                    send_python_def(com, rel);
            }

            send_idl_def(com, rel);
            break;

        case getUmlDefCmd:
            send_uml_def(com, rel);
            break;

        case getCppDefCmd:
            send_uml_def(com, rel);
            send_cpp_def(com, rel);
            break;

        case getJavaDefCmd:
            send_uml_def(com, rel);
            send_java_def(com, rel);
            break;

        case getPhpDefCmd:
            send_uml_def(com, rel);
            send_php_def(com, rel);
            break;

        case getPythonDefCmd:
            send_uml_def(com, rel);
            send_python_def(com, rel);
            break;

        case getIdlDefCmd:
            send_uml_def(com, rel);
            send_idl_def(com, rel);
            break;

        case sideCmd:
            if (*args)
                start->write_id(com);
            else if (end != 0)
                end->write_id(com);
            else
                com->write_id(0);

            break;

        default:
            return FALSE;
        }
    }

    return TRUE;
}
Exemple #14
0
bool ClassData::tool_cmd(ToolCom * com, const char * args,
			 BrowserNode * bn,
			 const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setIsAbstractCmd:
	if ((*args == 0) && 
	    strcmp(browser_node->get_stereotype(), "enum") &&
	    ((BrowserClass *) browser_node)->have_abstract_operation()) {
	  com->write_ack(FALSE);
	  return TRUE;
	}
	else
	  is_abstract = (*args != 0);
	break;
      case setActiveCmd:
	is_active = (*args != 0);
	break;
      case setVisibilityCmd:
	{
	  UmlVisibility v;
	  
	  if (! com->get_visibility(v, args)) {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	  else
	    uml_visibility = v;
	}
	break;
      case setBaseTypeCmd:
	if (stereotype != "typedef") {
	  com->write_ack(FALSE);
	  return TRUE;
	}
	else {
	  AType t;
	  
	  com->get_type(t, args);
	  set_base_type(t);	  
	}
	break;
      case setConstraintCmd:
	constraint = args;
	break;
      case setIsCppExternalCmd:
	cpp_external = (*args != 0);
	break;
      case setCppVisibilityCmd:
	{
	  UmlVisibility v;
	  
	  if (! com->get_extended_visibility(v, args)) {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	  else
	    cpp_visibility = v;
	}
	break;
      case setCppDeclCmd:
	cpp_decl = args;
	break;
      case setIsJavaExternalCmd:
	java_external = (*args != 0);
	break;
      case setJavaDeclCmd:
	java_decl = args;
	break;
      case setJavaAnnotationCmd:
	{
	  QCString s = args;
	  
	  s = s.stripWhiteSpace();
	  if (! s.isEmpty())
	    s += '\n';
	  java_annotation = s;
	}
	break;
      case setIsJavaPublicCmd:
	{
	  UmlVisibility v = (*args != 0) ? UmlPublic : UmlPackageVisibility;
	  
	  if ((cpp_visibility == UmlDefaultVisibility) &&
	      (uml_visibility != UmlPublic) &&
	      (uml_visibility != UmlPackageVisibility))
	    cpp_visibility = uml_visibility;
	  uml_visibility = v;
	}
	break;
      case setIsJavaFinalCmd:
	java_final = (*args != 0);
	break;
      case setIsPhpExternalCmd:
	php_external = (*args != 0);
	break;
      case setPhpDeclCmd:
	php_decl = args;
	break;
      case setIsPhpFinalCmd:
	php_final = (*args != 0);
	break;
      case setIsPythonExternalCmd:
	python_external = (*args != 0);
	break;
      case setPythonDeclCmd:
	python_decl = args;
	break;
      case setIsPython2_2Cmd:
	python_2_2 = (*args != 0);
	break;
      case setIdlDeclCmd:
	idl_decl = args;
	break;
      case setSwitchTypeCmd:
	if (GenerationSettings::idl_class_stereotype(stereotype) != "union") {
	  com->write_ack(FALSE);
	  return TRUE;
	}
	else {
	  AType t;
	  
	  com->get_type(t, args);
	  set_switch_type(t);
	}
	break;
      case setIsIdlExternalCmd:
	idl_external = (*args != 0);
	break;
      case setIsIdlLocalCmd:
	idl_local = (*args != 0);
	break;
      case setIsIdlCustomCmd:
	idl_custom = (*args != 0);
	break;
      case setIsClassMemberCmd:
      case setIsVolatileCmd:
	com->write_ack(FALSE);
	return TRUE;
      case removeFormalCmd:
	{
	  unsigned rank = com->get_unsigned(args);
	  
	  if (rank < nformals) {
	    if (nformals == 1) {
	      delete [] formals;
	      formals = 0;
	    }
	    else
	      while (++rank != nformals)
		formals[rank - 1] = formals[rank];
	    nformals -= 1;
	    DontUpdateActuals = FALSE;
	  }
	  else {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	}
	break;
      case addFormalCmd:
	{
	  unsigned rank = com->get_unsigned(args);
	  
	  if (rank <= nformals) {
	    FormalParamData * new_formals = new FormalParamData[++nformals];
	    unsigned index;
	    
	    for (index = 0; index != rank; index += 1)
	      new_formals[index] = formals[index];
	    
	    new_formals[index].read(com, args);
	    
	    while (++index != nformals)
	      new_formals[index] = formals[index - 1];
	    
	    delete [] formals;
	    formals = new_formals;
	    DontUpdateActuals = FALSE;
	  }
	  else {
	    FormalParamData::skip(com, args);
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	}
	break;
      case replaceFormalCmd:
	{
	  unsigned rank = com->get_unsigned(args);
	  
	  if (rank < nformals) {
	    formals[rank].read(com, args);
	    DontUpdateActuals = FALSE;
	  }
	  else {
	    FormalParamData::skip(com, args);
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	}
	break;
      case replaceActualCmd:
	{
	  unsigned rank = com->get_unsigned(args);
	  
	  if (rank < actuals.count()) {
	    AType t;
	    
	    com->get_type(t, args);
	    actuals.at(rank)->set_value(t);
	  }
	  else {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	}
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
  
      // ok case
      bn->modified();	// call modified
      bn->package_modified();
      com->write_ack(TRUE);
    }
  }
  else {
    // get only !
    switch ((unsigned char) args[-1]) {
    case formalsCmd:
      {
	com->write_unsigned((unsigned) nformals);
	for (int index = 0; index != nformals; index += 1)
	  formals[index].send_uml_def(com);
      }
      break;
    case actualsCmd:
      {
	com->write_unsigned((unsigned) actuals.count());
	for (ActualParamData * a = actuals.first(); a != 0; a = actuals.next())
	  a->send_uml_def(com);
      }
      break;
    default:
      return BasicData::tool_cmd(com, args, bn, comment);
    }
  }
  
  return TRUE;
}
Exemple #15
0
bool ActivityData::tool_cmd(ToolCom * com, const char * args,
                            BrowserNode * bn,
                            const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        if (!bn->is_writable() && !root_permission())
            com->write_ack(FALSE);
        else {
            switch ((unsigned char) args[-1]) {
            case setUmlEntryBehaviorCmd:
                uml_condition.first = args;
                break;

            case setUmlExitBehaviorCmd:
                uml_condition.second = args;
                break;

            case setCppEntryBehaviorCmd:
                cpp_condition.first = args;
                break;

            case setCppExitBehaviorCmd:
                cpp_condition.second = args;
                break;

            case setJavaEntryBehaviorCmd:
                java_condition.first = args;
                break;

            case setJavaExitBehaviorCmd:
                java_condition.second = args;
                break;

            case setReadOnlyCmd:
                read_only = (*args != 0);
                break;

            case setSingleExecutionCmd:
                single_execution = (*args != 0);
                break;

            case setDefCmd:
                set_specification((BrowserOperation *) com->get_id(args));
                break;

            case setActiveCmd:
                is_active = (*args != 0);
                break;

            case setConstraintCmd:
                constraint = args;
                break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }

            // ok case
            bn->package_modified();
            modified();
            com->write_ack(TRUE);
        }
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);

    return TRUE;
}
Exemple #16
0
bool StateData::tool_cmd(ToolCom * com, const char * args,
                         BrowserNode * bn,
                         const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        bool ok = TRUE;

        if (!bn->is_writable() && !root_permission())
            ok = FALSE;
        else {
            switch ((unsigned char) args[-1]) {
            case setUmlEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.on_entry = args;

                break;

            case setUmlExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.on_exit = args;

                break;

            case setUmlActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.do_activity = args;

                break;

            case setCppEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.on_entry = args;

                break;

            case setCppExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.on_exit = args;

                break;

            case setCppActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.do_activity = args;

                break;

            case setJavaEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.on_entry = args;

                break;

            case setJavaExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.on_exit = args;

                break;

            case setJavaActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.do_activity = args;

                break;

            case setDefCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    set_specification((BrowserOperation *) com->get_id(args));

                break;

            case setActiveCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    is_active = (*args != 0);

                break;

            case setDerivedCmd: {
                BrowserState * st = (BrowserState *) com->get_id(args);

                if (st == reference) {
                    com->write_ack(TRUE);
                    return TRUE;
                }

                if ((st != 0) &&
                    (!((BrowserState *) bn)->can_reference() ||
                     !((BrowserState *) browser_node)->can_reference(st)))
                    ok = FALSE;
                else
                    set_reference(st);
            }
            break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }
        }

        if (ok) {
            bn->package_modified();
            modified();
        }

        com->write_ack(ok);
        return TRUE;
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);
}
Exemple #17
0
bool AttributeData::tool_cmd(ToolCom * com, const char * args,
                             BrowserNode * bn,
                             const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        if (!bn->is_writable() && !root_permission())
            com->write_ack(FALSE);
        else {
            switch ((unsigned char) args[-1]) {
            case setIsClassMemberCmd:
                isa_class_attribute = (*args != 0);
                break;

            case setIsVolatileCmd:
                isa_volatile_attribute = (*args != 0);
                break;

            case setVisibilityCmd: {
                UmlVisibility v;

                if (! com->get_visibility(v, args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }
                else
                    uml_visibility = v;
            }
            break;

            case setMultiplicityCmd:
                multiplicity = args;
                break;

            case setConstraintCmd:
                constraint = args;
                break;

            case setCppDeclCmd:
                cpp_decl = args;
                break;

            case setJavaDeclCmd:
                java_decl = args;
                break;

            case setJavaAnnotationCmd: {
                WrapperStr s = args;

                s = s.stripWhiteSpace();

                if (! s.isEmpty())
                    s += '\n';

                java_annotation = s;
            }
            break;

            case setPhpDeclCmd:
                php_decl = args;
                break;

            case setPythonDeclCmd:
                python_decl = args;
                break;

            case setIdlDeclCmd:
                idl_decl = args;
                break;

            case setCppVisibilityCmd: {
                UmlVisibility v;

                if (! com->get_extended_visibility(v, args)) {
                    com->write_ack(FALSE);
                    return TRUE;
                }
                else
                    cpp_visibility = v;
            }
            break;

            case setIsReadOnlyCmd:
                isa_const_attribute = (*args != 0);
                break;

            case setDefaultValueCmd:
                init_value = args;
                break;

            case setTypeCmd: {
                AType t;

                com->get_type(t, args);
                set_type(t);
            }
            break;

            case setIsCppMutableCmd:
                cpp_mutable = (*args != 0);
                break;

            case setIsJavaTransientCmd:
                java_transient = (*args != 0);
                break;

            case setIdlCaseCmd: {
                BrowserAttribute * at = (BrowserAttribute *) com->get_id(args);

                set_idlcase(at, args);
            }
            break;

            case setDerivedCmd:
                switch (*args) {
                case 0:
                    is_derived = is_derivedunion = FALSE;
                    break;

                case 1:
                    is_derived = TRUE;
                    is_derivedunion = FALSE;
                    break;

                case 3:
                    is_derived = is_derivedunion = TRUE;
                    break;

                default:
                    // derived union but non derived
                    com->write_ack(FALSE);
                    return TRUE;
                }

                break;

            case setOrderingCmd:
                is_ordered = (*args != 0);
                break;

            case setUniqueCmd:
                is_unique = (*args != 0);
                break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }

            // ok case
            bn->modified();
            bn->package_modified();
            modified();
            com->write_ack(TRUE);
        }

        return TRUE;
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);
}
Exemple #18
0
bool BrowserNode::delete_internal(QString & warning) {
  if (deletedp())
    return TRUE;
  
  if (!is_writable() && !root_permission() && !is_from_lib()) {
    warning += "\n    " + TR("%1 is read-only", full_name());
    return FALSE;
  }
  
  static Q3PtrList<BrowserNode> targetof;
  static bool made = FALSE;
  bool made_here;
  
  if (!made) {
    made = TRUE;
    made_here = TRUE;
    referenced_by(targetof, TRUE);
  }
  else
    made_here = FALSE;
    
  bool ro = FALSE;
  
  if (!root_permission()) {
    Q3PtrListIterator<BrowserNode> it(targetof);
    BrowserNode * r;
    
    while ((r = it.current()) != 0) {
      if (!r->is_writable() && !r->is_from_lib()) {
	ro = TRUE;
	warning += "\n    ";
	switch (r->get_type()) {
	case UmlComponent:
	  warning += TR("%1 referenced by the read-only component %2", full_name(), r->full_name());
	  break;
	case UmlArtifact:
	  warning += TR("%1 referenced by the read-only artifact %2", full_name(), r->full_name());
	  break;
	default:
	  warning += TR("%1 is the target of the read-only relation %2", full_name(), r->full_name());
	  break;
	}
      }
      
      ++it;
    }
  }
  
  if (made_here) {
    made = FALSE;
    targetof.clear();
  }
  
  if (ro)
    return FALSE;
  
  // sub elts
  Q3ListViewItem * child;
  bool ok = TRUE;
  
  for (child = firstChild(); child != 0; child = child->nextSibling())
    ok &= ((BrowserNode *) child)->delete_internal(warning);
  
  if (ok) {
    is_deleted = TRUE;
    if (is_marked) {
      marked_list.removeRef(this);
      is_marked = FALSE;
    }
    get_data()->delete_it();
    repaint();
    package_modified();
  }

  return ok;
}
Exemple #19
0
bool BrowserNode::tool_cmd(ToolCom * com, const char * args) {
  switch ((unsigned char) args[-1]) {
  case applyCmd:
  {
      QLOG_FATAL() << Q_FUNC_INFO << "If this got called then we have a logic flaw going on and BrowserNode needs to have Q_OBJECT in it to properly catch ToolCom::Run execution result";
      Q_ASSERT_X(0, "applyCmd happened", "very bad");
      int runResult = ToolCom::run(args, this, FALSE, FALSE);
      com->write_unsigned(runResult);
      break;
  }
  case createCmd:
    // invalid creation
    com->write_id(0);
    break;
  case parentCmd:
    if (this != BrowserView::get_project())
      ((BrowserNode *) parent())->write_id(com);
    else
      com->write_id(0);
    break;
  case childrenCmd:
    {
      unsigned v = com->api_format();
      unsigned n = 0;
      Q3ListViewItem * child;
      
      for (child = firstChild(); child != 0; child = child->nextSibling())
	if (!((BrowserNode *) child)->deletedp() &&
	    ((BrowserNode *) child)->api_compatible(v))
	  n += 1;
      
      com->write_unsigned(n);
      
      for (child = firstChild(); child != 0; child = child->nextSibling())
	if (!((BrowserNode *) child)->deletedp() &&
	    ((BrowserNode *) child)->api_compatible(v))
	  ((BrowserNode *) child)->write_id(com);
    }
    break;
  case getDefCmd:
  case getUmlDefCmd:
  case getCppDefCmd:
  case getJavaDefCmd:
  case getPhpDefCmd:
  case getPythonDefCmd:
  case getIdlDefCmd:
    get_data()->send_uml_def(com, this, comment);
    break;
  case isWritableCmd:
    com->write_bool(!is_read_only);
    break;
  case supportFileCmd:
    // goes up to the package
    return ((BrowserNode *) parent())->tool_cmd(com, args);
  case isOpenCmd:
    com->write_bool(isOpen());
    break;
  case referencedByCmd:
    {
      BrowserNodeList targetof;
      
      referenced_by(targetof);
      // remove duplicats
      targetof.sort_it();
      
      BrowserNode * bn;
      
      targetof.first();
      while ((bn = targetof.current()) != 0)
	if (bn == targetof.next())
	  targetof.remove();
      
      com->write_unsigned(targetof.count());
      
      for (bn = targetof.first(); bn != 0; bn = targetof.next())
	bn->write_id(com);
    }
    break;
  case setCoupleValueCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      set_value(args, args + strlen(args) + 1);
      package_modified();
      get_data()->modified();
      com->write_ack(TRUE);
    }
    break;
  case setDescriptionCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      set_comment(args);
      package_modified();
      com->write_ack(TRUE);
    }
    break;
  case setNameCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      if (name != args) {
	if (((BrowserNode *) parent())->wrong_child_name(args, get_type(),
							 allow_spaces(),
							 allow_empty())) {
	  com->write_ack(FALSE);
	  return TRUE;
	}
	else {
	  set_name(args);
	  update_stereotype();
	  package_modified();
	  get_data()->modified();
	}
      }
      com->write_ack(TRUE);
    }
    break;
  case setOpenCmd:
    BrowserView::select(this);
    setOpen(*args);
    com->write_ack(TRUE);
    break;
  case setMarkedCmd:
    if (*args) {
      if (this == BrowserView::get_project())
	com->write_ack(FALSE);
      else {
	if (!is_marked)
	  toggle_mark();
	com->write_ack(TRUE);
      }
    }
    else {
      if (is_marked)
	toggle_mark();
      com->write_ack(TRUE);
    }
    break;
  case moveAfterCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      BrowserNode * p = (BrowserNode *) parent();
      BrowserNode * after = (BrowserNode *) com->get_id(args);
      
      if (after == 0) {
	if (p == 0)
	  com->write_ack(FALSE);
	else {
	  p->takeItem(this);
	  p->insertItem(this);
	  com->write_ack(TRUE);
	  p->package_modified();
	}
      }
      else if ((after->parent() != p) ||
	       (after == this)) {
	com->write_ack(FALSE);
      }
      else {
	moveItem(after);
	com->write_ack(TRUE);
	p->package_modified();
      }
    }
    break;
  case moveInCmd:
    // plug-out upgrade, limited checks
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      BrowserNode * newparent = (BrowserNode *) com->get_id(args);
      BrowserNode * oldparent = (BrowserNode *) parent();
      
      if ((newparent == oldparent) || (newparent == this)) {
	com->write_ack(FALSE);
      }
      else {
	oldparent->takeItem(this);
	newparent->insertItem(this);
	com->write_ack(TRUE);
	oldparent->package_modified();
	newparent->package_modified();
      }
    }
    break;
  case old_deleteCmd:
  case deleteCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      delete_it();
      ((BrowserNode *) parent())->get_data()->modified();
      package_modified();
      com->write_ack(TRUE);
    }
    break;
  case applyStereotypeCmd:
    if (is_read_only && !root_permission())
      com->write_ack(FALSE);
    else {
      ProfiledStereotypes::applyStereotype(this); // call package_modified() if needed
      com->write_ack(TRUE);
    }
    break;
  default:
    return FALSE;
  }
      
  return TRUE;
}