@@ 1442-1626 (lines=185) @@ | ||
1439 | Decision goal = expansion.getGoalDecision(); |
|
1440 | ||
1441 | // check subgoals from selected synchronization rule if any |
|
1442 | if (expansion.hasSubGoals()) { |
|
1443 | ||
1444 | // get the rule to apply |
|
1445 | SynchronizationRule rule = expansion.getSynchronizationRule(); |
|
1446 | // create an index of token variable |
|
1447 | Map<TokenVariable, Decision> var2dec = new HashMap<>(); |
|
1448 | var2dec.put(rule.getTriggerer(), goal); |
|
1449 | // add pending decisions |
|
1450 | for (TokenVariable var : rule.getTokenVariables()) { |
|
1451 | ||
1452 | // get target component |
|
1453 | DomainComponent target = var.getValue().getComponent(); |
|
1454 | // create a pending decision |
|
1455 | Decision pending = target.create( |
|
1456 | var.getValue(), |
|
1457 | var.getParameterLabels()); |
|
1458 | ||
1459 | // set causal link |
|
1460 | pending.setCausalLink(goal); |
|
1461 | // check solving knowledge |
|
1462 | if (var.isMandatoryExpansion()) { |
|
1463 | pending.setMandatoryExpansion(); |
|
1464 | } |
|
1465 | ||
1466 | // check solving knowledge |
|
1467 | if (var.isMandatoryUnificaiton()) { |
|
1468 | pending.setMandatoryUnification(); |
|
1469 | } |
|
1470 | ||
1471 | // add entry to cache |
|
1472 | var2dec.put(var, pending); |
|
1473 | // add created decision |
|
1474 | expansion.addCreatedDecision(pending); |
|
1475 | } |
|
1476 | ||
1477 | // add pending relations |
|
1478 | for (SynchronizationConstraint c : rule.getConstraints()) { |
|
1479 | // check category |
|
1480 | switch (c.getCategory()) { |
|
1481 | ||
1482 | // temporal category |
|
1483 | case TEMPORAL_CONSTRAINT : { |
|
1484 | ||
1485 | // temporal constraint |
|
1486 | TemporalSynchronizationConstraint tc = (TemporalSynchronizationConstraint) c; |
|
1487 | // get decisions |
|
1488 | Decision reference = var2dec.get(tc.getReference()); |
|
1489 | Decision target = var2dec.get(tc.getTarget()); |
|
1490 | // get reference component |
|
1491 | DomainComponent refComp = reference.getComponent(); |
|
1492 | // create pending relation |
|
1493 | TemporalRelation rel = refComp.create(tc.getType(), reference, target); |
|
1494 | // set bounds |
|
1495 | rel.setBounds(tc.getBounds()); |
|
1496 | // add created relation |
|
1497 | expansion.addCreatedRelation(rel); |
|
1498 | } |
|
1499 | break; |
|
1500 | ||
1501 | // parameter category |
|
1502 | case PARAMETER_CONSTRAINT: { |
|
1503 | ||
1504 | // parameter constraint |
|
1505 | ParameterSynchronizationConstraint pc = (ParameterSynchronizationConstraint) c; |
|
1506 | // get decisions |
|
1507 | Decision reference = var2dec.get(pc.getReference()); |
|
1508 | Decision target = var2dec.get(pc.getTarget()); |
|
1509 | // get reference component |
|
1510 | DomainComponent refComp = reference.getComponent(); |
|
1511 | // create pending relation |
|
1512 | ParameterRelation rel = (ParameterRelation) refComp.create(pc.getType(), reference, target); |
|
1513 | ||
1514 | // check parameter relation type |
|
1515 | switch (rel.getType()) { |
|
1516 | ||
1517 | // bind parameter relation |
|
1518 | case BIND_PARAMETER : { |
|
1519 | ||
1520 | // bind constraint |
|
1521 | BindParameterRelation bind = (BindParameterRelation) rel; |
|
1522 | // set binding value |
|
1523 | bind.setValue(pc.getTargetLabel()); |
|
1524 | // set reference label |
|
1525 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1526 | ||
1527 | // get trigger label index |
|
1528 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1529 | // set decision's label |
|
1530 | String label = goal.getParameterLabelByIndex(index); |
|
1531 | // set label |
|
1532 | bind.setReferenceParameterLabel(label); |
|
1533 | ||
1534 | } else { |
|
1535 | ||
1536 | bind.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1537 | } |
|
1538 | } |
|
1539 | break; |
|
1540 | ||
1541 | // equal parameter relation |
|
1542 | case EQUAL_PARAMETER : { |
|
1543 | ||
1544 | // get relation |
|
1545 | EqualParameterRelation eq = (EqualParameterRelation) rel; |
|
1546 | ||
1547 | // check if source is the trigger |
|
1548 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1549 | ||
1550 | // get trigger label index |
|
1551 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1552 | // get decions's label |
|
1553 | String label = goal.getParameterLabelByIndex(index); |
|
1554 | // set label |
|
1555 | eq.setReferenceParameterLabel(label); |
|
1556 | ||
1557 | } else { |
|
1558 | ||
1559 | // directly set the label |
|
1560 | eq.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1561 | } |
|
1562 | ||
1563 | // check if target is the trigger |
|
1564 | if (pc.getTarget().equals(rule.getTriggerer())) { |
|
1565 | ||
1566 | // get trigger label index |
|
1567 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getTargetLabel()); |
|
1568 | // get decision's label |
|
1569 | String label = goal.getParameterLabelByIndex(index); |
|
1570 | // set label |
|
1571 | eq.setTargetParameterLabel(label); |
|
1572 | ||
1573 | } else { |
|
1574 | ||
1575 | // directly set the label |
|
1576 | eq.setTargetParameterLabel(pc.getTargetLabel()); |
|
1577 | } |
|
1578 | } |
|
1579 | break; |
|
1580 | ||
1581 | // not-equal parameter relation |
|
1582 | case NOT_EQUAL_PARAMETER : { |
|
1583 | ||
1584 | // get relation |
|
1585 | NotEqualParameterRelation neq = (NotEqualParameterRelation) rel; |
|
1586 | ||
1587 | // check if source is the trigger |
|
1588 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1589 | ||
1590 | // get trigger label index |
|
1591 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1592 | // get decions's label |
|
1593 | String label = goal.getParameterLabelByIndex(index); |
|
1594 | // set label |
|
1595 | neq.setReferenceParameterLabel(label); |
|
1596 | ||
1597 | } else { |
|
1598 | ||
1599 | // directly set the label |
|
1600 | neq.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1601 | } |
|
1602 | ||
1603 | // check if target is the trigger |
|
1604 | if (pc.getTarget().equals(rule.getTriggerer())) { |
|
1605 | ||
1606 | // get trigger label index |
|
1607 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getTargetLabel()); |
|
1608 | // get decision's label |
|
1609 | String label = goal.getParameterLabelByIndex(index); |
|
1610 | // set label |
|
1611 | neq.setTargetParameterLabel(label); |
|
1612 | ||
1613 | } else { |
|
1614 | // directly set the label |
|
1615 | neq.setTargetParameterLabel(pc.getTargetLabel()); |
|
1616 | } |
|
1617 | } |
|
1618 | break; |
|
1619 | ||
1620 | default : { |
|
1621 | throw new RuntimeException("Unknown parameter constraint type - " + rel.getType()); |
|
1622 | } |
|
1623 | } |
|
1624 | ||
1625 | // add created relation |
|
1626 | expansion.addCreatedRelation(rel); |
|
1627 | } |
|
1628 | } |
|
1629 | } |
@@ 1257-1441 (lines=185) @@ | ||
1254 | // get goal |
|
1255 | Decision goal = expansion.getGoalDecision(); |
|
1256 | // check subgoals from selected synchronization rule if any |
|
1257 | if (expansion.hasSubGoals()) { |
|
1258 | ||
1259 | // get the rule to apply |
|
1260 | SynchronizationRule rule = expansion.getSynchronizationRule(); |
|
1261 | // create an index of token variable |
|
1262 | Map<TokenVariable, Decision> var2dec = new HashMap<>(); |
|
1263 | var2dec.put(rule.getTriggerer(), goal); |
|
1264 | // add pending decisions |
|
1265 | for (TokenVariable var : rule.getTokenVariables()) { |
|
1266 | ||
1267 | // get target component |
|
1268 | DomainComponent target = var.getValue().getComponent(); |
|
1269 | // create a pending decision |
|
1270 | Decision pending = target.create( |
|
1271 | var.getValue(), |
|
1272 | var.getParameterLabels()); |
|
1273 | ||
1274 | // set causal link |
|
1275 | pending.setCausalLink(goal); |
|
1276 | // check solving knowledge |
|
1277 | if (var.isMandatoryExpansion()) { |
|
1278 | pending.setMandatoryExpansion(); |
|
1279 | } |
|
1280 | ||
1281 | // check solving knowledge |
|
1282 | if (var.isMandatoryUnificaiton()) { |
|
1283 | pending.setMandatoryUnification(); |
|
1284 | } |
|
1285 | ||
1286 | // add entry to cache |
|
1287 | var2dec.put(var, pending); |
|
1288 | // add created decision |
|
1289 | expansion.addCreatedDecision(pending); |
|
1290 | } |
|
1291 | ||
1292 | // add pending relations |
|
1293 | for (SynchronizationConstraint c : rule.getConstraints()) { |
|
1294 | // check category |
|
1295 | switch (c.getCategory()) { |
|
1296 | ||
1297 | // temporal category |
|
1298 | case TEMPORAL_CONSTRAINT : { |
|
1299 | ||
1300 | // temporal constraint |
|
1301 | TemporalSynchronizationConstraint tc = (TemporalSynchronizationConstraint) c; |
|
1302 | // get decisions |
|
1303 | Decision reference = var2dec.get(tc.getReference()); |
|
1304 | Decision target = var2dec.get(tc.getTarget()); |
|
1305 | // get reference component |
|
1306 | DomainComponent refComp = reference.getComponent(); |
|
1307 | // create pending relation |
|
1308 | TemporalRelation rel = refComp.create(tc.getType(), reference, target); |
|
1309 | // set bounds |
|
1310 | rel.setBounds(tc.getBounds()); |
|
1311 | // add created relation |
|
1312 | expansion.addCreatedRelation(rel); |
|
1313 | } |
|
1314 | break; |
|
1315 | ||
1316 | // parameter category |
|
1317 | case PARAMETER_CONSTRAINT: { |
|
1318 | ||
1319 | // parameter constraint |
|
1320 | ParameterSynchronizationConstraint pc = (ParameterSynchronizationConstraint) c; |
|
1321 | // get decisions |
|
1322 | Decision reference = var2dec.get(pc.getReference()); |
|
1323 | Decision target = var2dec.get(pc.getTarget()); |
|
1324 | // get reference component |
|
1325 | DomainComponent refComp = reference.getComponent(); |
|
1326 | // create pending relation |
|
1327 | ParameterRelation rel = (ParameterRelation) refComp.create(pc.getType(), reference, target); |
|
1328 | ||
1329 | // check parameter relation type |
|
1330 | switch (rel.getType()) { |
|
1331 | ||
1332 | // bind parameter relation |
|
1333 | case BIND_PARAMETER : { |
|
1334 | ||
1335 | // bind constraint |
|
1336 | BindParameterRelation bind = (BindParameterRelation) rel; |
|
1337 | // set binding value |
|
1338 | bind.setValue(pc.getTargetLabel()); |
|
1339 | // set reference label |
|
1340 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1341 | ||
1342 | // get trigger label index |
|
1343 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1344 | // set decision's label |
|
1345 | String label = goal.getParameterLabelByIndex(index); |
|
1346 | // set label |
|
1347 | bind.setReferenceParameterLabel(label); |
|
1348 | ||
1349 | } else { |
|
1350 | ||
1351 | bind.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1352 | } |
|
1353 | } |
|
1354 | break; |
|
1355 | ||
1356 | // equal parameter relation |
|
1357 | case EQUAL_PARAMETER : { |
|
1358 | ||
1359 | // get relation |
|
1360 | EqualParameterRelation eq = (EqualParameterRelation) rel; |
|
1361 | ||
1362 | // check if source is the trigger |
|
1363 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1364 | ||
1365 | // get trigger label index |
|
1366 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1367 | // get decions's label |
|
1368 | String label = goal.getParameterLabelByIndex(index); |
|
1369 | // set label |
|
1370 | eq.setReferenceParameterLabel(label); |
|
1371 | ||
1372 | } else { |
|
1373 | ||
1374 | // directly set the label |
|
1375 | eq.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1376 | } |
|
1377 | ||
1378 | // check if target is the trigger |
|
1379 | if (pc.getTarget().equals(rule.getTriggerer())) { |
|
1380 | ||
1381 | // get trigger label index |
|
1382 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getTargetLabel()); |
|
1383 | // get decision's label |
|
1384 | String label = goal.getParameterLabelByIndex(index); |
|
1385 | // set label |
|
1386 | eq.setTargetParameterLabel(label); |
|
1387 | ||
1388 | } else { |
|
1389 | ||
1390 | // directly set the label |
|
1391 | eq.setTargetParameterLabel(pc.getTargetLabel()); |
|
1392 | } |
|
1393 | } |
|
1394 | break; |
|
1395 | ||
1396 | // not-equal parameter relation |
|
1397 | case NOT_EQUAL_PARAMETER : { |
|
1398 | ||
1399 | // get relation |
|
1400 | NotEqualParameterRelation neq = (NotEqualParameterRelation) rel; |
|
1401 | ||
1402 | // check if source is the trigger |
|
1403 | if (pc.getReference().equals(rule.getTriggerer())) { |
|
1404 | ||
1405 | // get trigger label index |
|
1406 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getReferenceLabel()); |
|
1407 | // get decions's label |
|
1408 | String label = goal.getParameterLabelByIndex(index); |
|
1409 | // set label |
|
1410 | neq.setReferenceParameterLabel(label); |
|
1411 | ||
1412 | } else { |
|
1413 | ||
1414 | // directly set the label |
|
1415 | neq.setReferenceParameterLabel(pc.getReferenceLabel()); |
|
1416 | } |
|
1417 | ||
1418 | // check if target is the trigger |
|
1419 | if (pc.getTarget().equals(rule.getTriggerer())) { |
|
1420 | ||
1421 | // get trigger label index |
|
1422 | int index = rule.getTriggerer().getParameterIndexByLabel(pc.getTargetLabel()); |
|
1423 | // get decision's label |
|
1424 | String label = goal.getParameterLabelByIndex(index); |
|
1425 | // set label |
|
1426 | neq.setTargetParameterLabel(label); |
|
1427 | ||
1428 | } else { |
|
1429 | // directly set the label |
|
1430 | neq.setTargetParameterLabel(pc.getTargetLabel()); |
|
1431 | } |
|
1432 | } |
|
1433 | break; |
|
1434 | ||
1435 | default : { |
|
1436 | throw new RuntimeException("Unknown parameter constraint type - " + rel.getType()); |
|
1437 | } |
|
1438 | } |
|
1439 | ||
1440 | // add created relation |
|
1441 | expansion.addCreatedRelation(rel); |
|
1442 | } |
|
1443 | } |
|
1444 | } |