[Scada-LTS] The possibility to add image sets without requiring a reboot

in #utopian-io7 years ago (edited)

start.png

[Scada-LTS] The possibility to add image sets without a restart

  • The Function for the system administrator.

Before the changes, the ScadaLTS program loaded images information once at startup and it was stored in memory for the entire duration of the program.

At the moment the administrator can add a picture to the resources by copying it to the appropriate directory and refresh cache images.



▶️ DTube
▶️ IPFS

How was it implemented?

I added: REST API - GET "/api/resources/imagesRefresh"

@Controller
public class ResourcesAPI {

    private static final Log LOG = LogFactory.getLog(ResourcesAPI.class);

    @Resource
    private ResourcesService resourcesService;

    @RequestMapping(value = "/api/resources/imagesRefresh", method = RequestMethod.GET)
    public ResponseEntity<String> imagesRefresh(HttpServletRequest request) {

        LOG.info("/api/resources/imagesRefresh");
        try {
            User user = Common.getUser(request);
            if (user != null && user.isAdmin()) {
                resourcesService.refreshImages();
                return new ResponseEntity<String>(HttpStatus.OK);
            } else {
                return new ResponseEntity<String>(HttpStatus.UNAUTHORIZED);
            }
        } catch (Exception e) {
             return new ResponseEntity<String>(e.toString(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

I added the service:

@Service
public class ResourcesService {

    public void refreshImages() {
        ViewGraphicLoader loader = new ViewGraphicLoader();
        List<ImageSet> imageSets = new ArrayList<ImageSet>();
        List<DynamicImage> dynamicImages = new ArrayList<DynamicImage>();

        ServletContext ctx = Common.ctx.getCtx();

        for (ViewGraphic g : loader.loadViewGraphics(ctx.getRealPath(""))) {
            if (g.isImageSet())
                imageSets.add((ImageSet) g);
            else if (g.isDynamicImage())
                dynamicImages.add((DynamicImage) g);
            else
                throw new ShouldNeverHappenException(
                        "Unknown view graphic type");
        }

        ctx.setAttribute(Common.ContextKeys.IMAGE_SETS, imageSets);
        ctx.setAttribute(Common.ContextKeys.DYNAMIC_IMAGES, dynamicImages);

        Common.ctx = new ContextWrapper(ctx);

    }

}

I added a button in the System Settings tab.

<div class="borderDiv marB marR" style="float:left">
       <table width="100%">
          <tr>
             <td>
               <span class="smallTitle">Cache images</span>
             </td>
          </tr>
          <tr>
             <td>
               <button onClick="refreshImages()">Refresh</button>
             </td>
          </tr>
       </table>
  </div>

I added function refreshImages on a button click

 function refreshImages() {

        var pathArray = location.href.split( '/' );
        var protocol = pathArray[0];
        var host = pathArray[2];
        var appScada = pathArray[3];
        var myLocation;
        if (!myLocation) {
           myLocation = protocol + "//" + host + "/" + appScada + "/";
        }

        jQuery.ajax({
            type: 'GET',
            dataType: 'text',
            url:myLocation+"/api/resources/imagesRefresh",
            success: function(msg){
                alert("Success: the resource images has been refreshed");
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert("Problem when refreshing assets:"+errorThrown.message);
            }
        });

    }

The changes will be made in the release v0.0.9.4, which is planned the next week.

Pull request: 516

Issues: 509 485

Thank you.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Hey @grzesiekb I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Congratulations @grzesiekb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

Do not miss the last announcement from @steemitboard!

Congratulations @grzesiekb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

Congratulations @grzesiekb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your Board of Honor.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last announcement from @steemitboard!

Do you like SteemitBoard's project? Vote for its witness and get one more award!

Congratulations @grzesiekb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard!


Participate in the SteemitBoard World Cup Contest!
Collect World Cup badges and win free SBD
Support the Gold Sponsors of the contest: @good-karma and @lukestokes


Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Loading...

Coin Marketplace

STEEM 0.30
TRX 0.31
JST 0.050
BTC 99849.83
ETH 3983.53
SBD 4.09